R语言如何将组内存在RL值大于5的同TRIAL ID数据迁移到新列
问题原因
你的代码存在3个核心错误:
group_by("TRIAL")给列名加了引号,没有按TRIAL列的真实值分组,而是把所有行归到了同一个自定义字符串组case_when ("RL"> 5 ~ "RL")中RL加了引号,变成了字符串和数字的无意义比较,没有调用RL列的真实值- 逻辑不符合需求:你当前是判断单行列值是否大于5,需求是判断整组是否存在任意一个大于5的RL值
正确实现代码
library(dplyr) dt_result <- dt %>% # 按TRIAL列分组 group_by(TRIAL) %>% mutate( # 先标记组内是否有RL>5的记录 group_flag = any(RL > 5, na.rm = TRUE), # 符合条件的组迁移RL值到RLCT,否则填NA RLCT = ifelse(group_flag, RL, NA), # 符合条件的组原RL列赋值为NA,否则保留原值 RL = ifelse(group_flag, NA, RL) ) %>% ungroup() %>% # 删除中间标记列 select(-group_flag)
如果追求更简洁的写法,也可以省略中间标记列,直接用组级判断实现:
dt %>% group_by(TRIAL) %>% mutate( RLCT = if (any(RL > 5, na.rm = TRUE)) RL else NA_real_, RL = if (any(RL > 5, na.rm = TRUE)) NA_real_ else RL ) %>% ungroup()
运行上述任意代码得到的结果都和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者abduljelil
相关产品推荐
相关产品推荐

