You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:13:32