如何在R中按优先级规则合并表格两列生成新列
在R中按优先级生成新列的解决方案
首先先构造你提供的示例数据框:
df <- data.frame( x = c(2, 1, NA, 2, 1, 2, 1), Y = c(1, 1, 1, NA, 2, 2, 1) )
方法一:基础R实现
利用ifelse嵌套和rowSums函数,按优先级规则生成新列xy:
df$xy <- ifelse( # 判断每行是否存在1(忽略NA) rowSums(df == 1, na.rm = TRUE) > 0, 1, # 若无1,判断是否存在2(忽略NA) ifelse(rowSums(df == 2, na.rm = TRUE) > 0, 2, NA) )
方法二:tidyverse(dplyr)实现
如果你习惯用tidyverse语法,case_when函数的逻辑更直观,适合新手理解:
# 首次使用需先安装dplyr包 # install.packages("dplyr") library(dplyr) df <- df %>% mutate(xy = case_when( x == 1 | Y == 1 ~ 1, # 只要x或Y是1,xy为1 x == 2 | Y == 2 ~ 2, # 无1但有2,xy为2 is.na(x) & is.na(Y) ~ NA_real_# 两者都是NA,xy为NA ))
运行任意一种方法后,你会得到期望的结果:
print(df) # x Y xy # 1 2 1 1 # 2 1 1 1 # 3 NA 1 1 # 4 2 NA 2 # 5 1 2 1 # 6 2 2 2 # 7 1 1 1
内容的提问来源于stack exchange,提问作者Yuri Rolimus
相关产品推荐
相关产品推荐

