2017-10-17 3 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도 포함됩니다. "생존"열에는 생존했는지 여부 (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은 여러 연령대에 속합니다. 나는 그것이 우스꽝 스럽다는 것을 이해한다. 그러나 루프를 작성하거나 이와 같은 그룹으로 테이블을 만들면 모든 단계에서 5 단계의 생존율을 알 수 있습니다. – iomedee

답변

1

먼저 몇 가지 데이터를 작성합니다.

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

이제 코드. 그룹에 대한 입력을 cut으로 정의하고 각 그룹에 대해 0에서 3까지 기능을 수행하는 lapply의 함수를 정의하십시오. 당신이 비율을 원하는 경우

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() 함수를 재귀 적으로 사용하여 각 행 5 개 세트를 추가하십시오.

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

영업 이익이 요청한 생존의 비율이 가장 높은 곳

이 연령 그룹을 찾으려면 다음 dataframe (df)를 가정하면 두 개의 열, AgeSurvived (0 또는 1)가

비는 동등 조인 사용 가능한 하나의 해결책이 :

 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 

결과 3,516,지금까지 살아남은 단 하나의 승객과 연령 그룹이 100 %의 높은 생존율을 보여줍니다. 이는 사소한 일이며 OP가 찾고있는 결과가 아닐 수도 있습니다. delta 중 하나를 확대하거나 연령 그룹 당 절대 승객 수에 대한 임계 값을 적용해야합니다 (예 : total.N > 2).

관련 문제