R语言按ID分组基于Eval列条件创建新列的实现方法
R 按分组判断列是否存在指定布尔值的实现方法
核心逻辑:需求等价于判断每个ID分组内,Eval列取反后是否存在至少一个TRUE值,直接调用any()函数即可实现该判断。
方法1:使用dplyr包(tidyverse生态常用语法)
library(dplyr) result <- df %>% group_by(ID) %>% summarise(x = any(!Eval)) %>% ungroup()
方法2:Base R实现(无需加载额外依赖包)
result <- aggregate(Eval ~ ID, data = df, FUN = function(x) any(!x)) colnames(result) <- c("ID", "x")
方法3:data.table实现(适合处理大数据量场景,性能更高)
library(data.table) setDT(df) result <- df[, .(x = any(!Eval)), by = ID]
以上三种方法输出的结果均符合要求:
ID x 1 1 FALSE 2 2 TRUE 3 3 TRUE 4 4 FALSE
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

