如何使用tidyverse按条件汇总指定行的n值并生成新行?
解决方法
用tidyverse工具可以通过筛选、汇总再合并的方式实现需求,代码如下:
library(tidyverse) # 输入数据 df <- tibble(dif = c(0, 1, 2, 3), n = c(2, 4, 6, 8)) # 处理数据 result <- df %>% # 保留dif=0的原始行 filter(dif == 0) %>% # 合并dif>=1的行的汇总结果 bind_rows( df %>% filter(dif >= 1) %>% summarize(dif = 1, n = sum(n)) ) # 查看结果 result
运行后输出为:
# A tibble: 2 × 2 dif n <dbl> <dbl> 1 0 2 2 1 18
步骤说明
- 先用
filter(dif == 0)提取原数据中dif为0的行,保留原始值; - 筛选出dif>=1的行后,用
summarize将dif统一设为1,并对n列求和得到总和; - 最后用
bind_rows把两部分数据合并,得到符合要求的结果。
内容的提问来源于stack exchange,提问作者jnat
相关产品推荐
相关产品推荐

