如何基于r中多个列的值创建变量

如何基于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,或者

我有一个数据框,它有三个变量,每个变量的有效值为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")

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)