如何用R语言合并数据集中的两个互斥列以生成新列?
解决方案
Base R 方法
方法1:用coalesce函数(R 3.5.0及以上版本支持)
这个函数会依次取第一个非NA的值,正好匹配你的需求:
df$Column_C <- coalesce(df$Column_A, df$Column_B)
方法2:用ifelse判断
逻辑更直白,手动判断A列是否有值,没有就取B列:
df$Column_C <- ifelse(!is.na(df$Column_A), df$Column_A, df$Column_B)
dplyr 方法
如果习惯用管道式操作,dplyr的coalesce函数同样适用:
library(dplyr) df <- df %>% mutate(Column_C = coalesce(Column_A, Column_B))
data.table 方法
如果用data.table处理大数据,可使用fcoalesce:
library(data.table) setDT(df)[, Column_C := fcoalesce(Column_A, Column_B)]
测试验证
用你的示例数据构造测试框:
df <- data.frame( Unique_IQ = c(10204050, 10204051, 10204052, 10204053, 10204054, 10204055), Column_A = c("Top10%", NA, "Top90%", "Top80%", NA, NA), Column_B = c(NA, "Top20%", NA, NA, "Top80%", NA), stringsAsFactors = FALSE )
运行任意一种方法后,Column_C的结果会和你预期完全一致:c("Top10%", "Top20%", "Top90%", "Top80%", "Top80%", NA)
内容的提问来源于stack exchange,提问作者Vlad Zaha
相关产品推荐
相关产品推荐

