在R中比较tibble多列,按指定规则生成新列D
问题:在R语言中根据多列非NA值的一致性生成新列
需要处理一个tibble数据,比较A、B、C三列的内容,生成新列D:
- 若所有非NA的列值都相等,D取该值
- 若存在非NA且值不相等的情况,D设为"ERROR"
原始数据
data <- tibble(A = as.factor(LETTERS[c(NA,2:9)]), B = as.factor(LETTERS[c(1:5,NA,7:9)]), C = as.factor(LETTERS[c(1:6,26,8:9)]))
原始数据输出:
> data # A tibble: 9 × 3 A B C <fct> <fct> <fct> 1 NA A A 2 B B B 3 C C C 4 D D D 5 E E E 6 F NA F 7 G G Z 8 H H H 9 I I I
解决方案代码
使用dplyr的行处理函数结合去重判断逻辑,同时适配因子类型转换:
library(dplyr) data |> rowwise() |> mutate( # 提取当前行的非NA值集合 non_na_vals = na.omit(c(A, B, C)), # 判断非NA值是否唯一,生成D列内容 D = ifelse(n_distinct(non_na_vals) == 1, as.character(non_na_vals[1]), "ERROR") ) |> ungroup() |> # 将D列转换为因子类型,匹配期望结果格式 mutate(D = as.factor(D))
运行结果
执行上述代码后,将得到符合预期的结果:
# A tibble: 9 × 4 A B C D <fct> <fct> <fct> <fct> 1 NA A A A 2 B B B B 3 C C C C 4 D D D D 5 E E E E 6 F NA F F 7 G G Z ERROR 8 H H H H 9 I I I I
内容的提问来源于stack exchange,提问作者user1
相关产品推荐
相关产品推荐

