如何用R语言按分组为所有行赋值(基于首时间点条件)
解决方案
你可以通过在分组后判断组内是否存在t1时间点且color为blue的记录,然后将这个判断结果广播到整组的所有行。具体有两种简洁的实现方式:
方法1:使用any()函数
any()会在分组内检查是否存在满足条件的行,返回单个逻辑值,mutate会自动把这个值填充到组内所有行:
library(dplyr) df %>% group_by(group) %>% mutate(all_blue = any(time == "t1" & color == "blue")) %>% ungroup()
方法2:直接提取t1对应的color值进行判断
因为每个组只有一个t1时间点,所以可以直接定位到该时间点的color值,再判断是否等于"blue",结果同样会被自动应用到整组:
df %>% group_by(group) %>% mutate(all_blue = color[time == "t1"] == "blue") %>% ungroup()
为什么你之前的代码没生效?
你之前的代码是逐行判断time == "t1" & color == "blue",所以只有每组的t1行满足条件时才会设为TRUE,其他行都是FALSE,没有实现"整组统一赋值"的逻辑。
验证结果
运行上述代码后,新列all_blue的结果会和你示例中的first_row_blue完全一致:
- A组和C组的所有行都是
TRUE(因为它们的t1 color是blue) - B组所有行都是
FALSE(t1 color是yellow)
内容的提问来源于stack exchange,提问作者eycramer
相关产品推荐
相关产品推荐

