2017-01-23 67 views
1

我有一个数据框有三个变量,每个变量的有效值为1,2,3,4,5,6,7。如果没有分配给变量的数值,它将显示NA。数据帧a看起来象下面这样:如何根据来自多个列的值创建变量

ak_eth co_eth pa_eth 
1  NA  1  NA 
2  NA  NA  1 
3  NA  NA  NA 
4  2  NA  NA 
5  NA  NA  4 
6  NA  NA  NA 

每行可以跨所有三个变量NA或有三个变量中的一个只有一个值。我想创建一个名为recode的新变量,该变量从现有的三个变量中获取值。如果所有三个现有变量均为NA,则新值为NA;如果三个现有变量中的一个有一个值,则将该值作为新变量。 我试过这个,但它似乎没有为我工作。

a$recode[is.na(a$ak_eth) & is.na(a$co_eth) & is.na(a$pa_eth)] <- "NA" 
library(car) 
a$recode <- recode(a$ak_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 
a$recode <- recode(a$co_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 
a$recode <- recode(a$pa_eth, "1=1;2=2;3=3;4=4;5=5;6=6;7=7") 

任何建议,将不胜感激。谢谢!

+0

不要创建一个字符'“NA”' – akrun

回答

3

我们可以使用pmax

a$Recode_Var <- do.call(pmax, c(a, na.rm = TRUE)) 

或者使用pmin

a$Recode_Var <- do.call(pmin, c(a, na.rm = TRUE)) 

或者另一种选择是rowSums

r1 <- rowSums(a, na.rm = TRUE) 
a$Recode_Var <- replace(r1, r1==0, NA) 

注:根据到OP的帖子Each row could have NA across all three variables or have only one value in one of the three variables

+0

非常感谢。所有的解决方案与我的数据框一起工作。如果可能,你能解释为什么我的代码不起作用,特别是汽车包装中的重新编码功能。 – littlestraw

+0

@littlestraw基于3列的结果,它有三次代替'recode',因此,通过将其分配给'recode'来丢失第一个或第二个输出的输出 – akrun

相关问题