2017-10-17 91 views
0

我正在使用来自https://www.kaggle.com/c/titanic的泰坦尼克号数据集。按R中的自定义范围对数据进行分组(例如,0-4,1-5,2-6,3-7等)

我想让“0-4”,“1-5”,“2-6”,“3-7”等不同的年龄段,并找出存活百分比的年龄组最高。我的年龄组在整数区间内[0,80]。原始数据集中的“Age”列也包含NAs。 “Survived”列包含该人是否存活的信息(0 =否,1 =是)。

我试图解决这个问题,但它没有奏效。我会很感激任何帮助。

for(i in 0:80){ 
max= -Inf 
x[i]<-(sum(subset(dataset, Age < (i+5) & Age >= i, select = "Survived")))/(length(which(dataset$Age < (i+5) & dataset$Age>= i))) 
if (x[i] > max) max <- x[i] 
return(max, i, i+5)} 
+0

您的群组重叠,“0-4”,“1-5”,“2-6”,“3-7”'。 “Age == 3”的值是什么组合,所有这些? –

+0

是的,年龄== 3属于几个年龄组。我明白这很荒谬。但是如果有可能写出一个循环或者用这样的组合来制作一张桌子,以便找出step = 5的每个年龄段的幸存者的存活率? – iomedee

回答

1

首先我会编一些数据。

set.seed(1234) # make it reproducible 
Age <- sample(c(NA, 1:80), 200, TRUE) 
Survived <- sample(0:1, 200, TRUE) 

现在的代码。定义一个函数cut输入到组中,并且lapply函数对每个组起作用,从03

fun <- function(i, x){ 
    as.character(cut(x, breaks = seq(i, 80, by = 5), include.lowest = TRUE)) 
} 

res <- unlist(lapply(0:3, fun, Age)) 
table(res) 

res_surv <- unlist(lapply(0:3, fun, Age[Survived == 1])) 
table(res_surv) 

如果你想百分比,你可以用

tbl_surv <- table(res_surv) 
100*tbl_surv/sum(tbl_surv) 
0

一种方法做到这一点是制表按年龄的一切,然后把这些成团。然后递归地使用lag()函数来添加每个五行的集合。假设数据帧(df)有两列,AgeSurvived(0或1):

library(dplyr) 

df %>% group_by(Age) %>% 
    summarize(n = n(), Survived = sum(Survived)) %>% 
    arrange(Age) %>% 
    mutate(Age_Group = paste0(Age-4, "-", Age)) %>% 
    mutate_at(vars(n, Survived), 
    funs(. + lag(.) + lag(lag(.)) + lag(lag(lag(.))) + lag(lag(lag(lag(.)))))) %>% 
    mutate(SurvivalRate = Survived/n) %>% 
    filter(!is.na(n)) %>% 
    select(-Age) 
1

的OP已经请求

找出年龄组,其中存活的比例是最高的

有一种使用非相等加入一个可能的解决方案:

library(data.table) 
library(titanic) 
dataset <- as.data.table(titanic_train) 
delta <- 4 
max_age <- 80 
dataset[ 
    .(lower = seq(0, max_age - delta), upper = seq(delta, max_age)), 
    on = .(Age >= lower, Age <= upper), .SD[, .N, by = Survived], by = .EACHI][ 
    , total.N := sum(N), by = Age][, share := N/total.N][] 
 Age Age Survived N total.N  share 
    1: 0 4  1 27  40 0.6750000 
    2: 0 4  0 13  40 0.3250000 
    3: 1 5  0 13  37 0.3513514 
    4: 1 5  1 24  37 0.6486486 
    5: 2 6  0 12  33 0.3636364 
---          
137: 72 76  0 1  1 1.0000000 
138: 73 77  0 1  1 1.0000000 
139: 74 78  0 1  1 1.0000000 
140: 75 79  NA 1  1 1.0000000 
141: 76 80  1 1  1 1.0000000 

到目前为止的结果表明,只有一个乘客年龄组谁幸存有100%的成活率最高。这是微不足道的,可能不是OP正在寻找的结果。必须扩大delta或者必须应用每个年龄组的乘客绝对数量的阈值,例如total.N > 2

相关问题