r - 如何最好地将 NA 的两个因素合并为一个变量

标签 r

我有很多这样的变量集:

   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/

相关文章:

r - 列表中每个元素的X值

r - 涉及 NaN、NA、numeric(0) 的 pivot_longer tibble

r - 删除训练数据中不存在的新因子水平

r - 当用于 BiomaRt 查询时,lapply 比 for-loop 慢。这是预期的吗?

machine-learning - R-Studio错误 "> "标志变成了 "+"

r - 取n维数组并在r中绑定(bind)n-1维数组

r - 如何根据值的实际顺序将数字转换为字母?

r - Shiny Server R session 创建一个无权访问的 tempdir()

r - 更改小数点会使 stargazer 在数字之间添加额外的空格

r - 如何将 RMSE、斜率、截距、r^2 添加到 R 图中?