我有很多这样的变量集:
Var1 Var2
"Asian" NA
NA "Black"
"White" NA
我想方便地将它们变成这种形式:
Race
"Asian"
"Black"
"White"
我一直在尝试类似的东西:
Race <- ifelse(is.na(Var1), Var2, Var1)
但这会将值转换为级别的数字,并且数字不匹配(例如,产生
1, 1, 2
)。有没有一种方便的方法来做到这一点(最好使用简短的、不言自明的代码)? (您可以使用 as.character
摆脱这种情况,但必须有更好的方法。)
最佳答案
通过 as.character
进行中间转换:
假设这是您的数据:
dat <- data.frame(Var1=c("Asian",NA,"White"),Var2=c(NA,"Black",NA))
do.call(pmax,c(lapply(dat,as.character),na.rm=TRUE))
#[1] "Asian" "Black" "White"
如果您需要处理特定子集,您可以执行以下操作:
do.call(pmax,c(lapply(dat[c("Var1","Var2")],as.character),na.rm=TRUE))
一个不需要的替代方案
as.character
将是:dat[cbind(1:nrow(dat),max.col(!is.na(dat)))]
#[1] "Asian" "Black" "White"
关于r - 如何最好地将 NA 的两个因素合并为一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894098/