2017-04-13 122 views
1

我有这样一个数据帧:合并多个列与条件

Q17a_17 Q17a_18 Q17a_19 Q17a_20 Q17a_21 Q17a_22 Q17a_23 
1 NA  NA  NA  NA  NA  NA  NA 
2 0  0  0  0  0  0  1 
3 0  0  0  0  0  1  1  
4 0  0  0  0  0  0  1 
5 1  0  0  0  1  1  0 
6 0  0  0  0  0  1  1 
7 1  1  0  0  1  0  1 

而且我想用一个新名称合并Q17a_17,Q17a_19和Q17a_23在新列。应删除“旧”列Q17a_17,Q17a_19和Q17a_23。 在新列中应该只有一个值符合以下条件:如果之前存在“NA”,则为“NA”,如果之前存在某个值“1”(如行3或4或7中),则为“1”;如果之前只有零,则为“0”。 也许这是很简单,但我已经奋斗了几个小时......

回答

0

我这里使用的是先计算一个载体,它是NANA值在三列的至少一个出现的办法,和零除此以外。另外,我们计算一个包含你想要的数值结果的向量。你想要什么可以通过将三列逻辑“或”来获得。然后,将这两个计算向量加在一起产生期望的结果。

na.vector <- df$Q17a_17 * df$Q17a_19 * df$Q17a_23 
na.vector[!is.na(na.vector)] <- 0 
num.vector <- as.numeric(df$Q17a_17 | df$Q17a_19 | df$Q17a_23) 
df$new_column <- na.vector + num.vector 
df <- df[ , -which(names(df) %in% c("Q17a_17", "Q17a_19", "Q17a_23"))]