如何基于r中多个列的值创建变量
我有一个数据框,它有三个变量,每个变量的有效值为1,2,3,4,5,6,7。如果没有为变量指定数值,它将显示如何基于r中多个列的值创建变量,r,R,我有一个数据框,它有三个变量,每个变量的有效值为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,或者
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")
a$recode[is.na(a$ak_eth)&is.na(a$co_eth)&is.na(a$pa_eth)]我们可以使用pmax
a$Recode_Var <- do.call(pmax, c(a, na.rm = TRUE))
或者另一个选项是rowSums
r1 <- rowSums(a, na.rm = TRUE)
a$Recode_Var <- replace(r1, r1==0, NA)
r1请勿创建字符“NA”
非常感谢。所有的解决方案都适用于我的数据框架。如果可能的话,你能解释一下为什么我的代码不起作用,特别是汽车软件包中的重新编码功能。@littlestraw它是根据3列的结果将重新编码
替换三次,因此,将第一列或第二列的输出分配给重新编码
r1 <- rowSums(a, na.rm = TRUE)
a$Recode_Var <- replace(r1, r1==0, NA)