如何基于区分列对数据框的成对行执行运算(R语言)
用dplyr计算分组差值的两种方法
方法一:分组后直接提取对应值计算
利用dplyr的分组和汇总功能,直接在每组内取出level=2和level=1的val值做差:
library(dplyr) dfDif <- df %>% group_by(color, hue) %>% summarise(dif = val[level == 2] - val[level == 1], .groups = "drop") # 输出结果 dfDif
执行后得到的结果与预期完全一致:
# A tibble: 6 × 3 color hue dif <chr> <chr> <dbl> 1 b l 1 2 b d 7 3 g l 8 4 g d 3 5 r l 2 6 r d 4
方法二:先转宽表再计算差值
先通过tidyr::pivot_wider将level列的两个值展开为单独列,再直接做减法,逻辑更直观:
library(dplyr) library(tidyr) dfDif <- df %>% pivot_wider(names_from = level, values_from = val) %>% mutate(dif = `2` - `1`) %>% select(color, hue, dif) dfDif
这个方法同样能得到符合要求的结果,且步骤清晰,适合需要查看原始level对应值的场景。
内容的提问来源于stack exchange,提问作者Steve S
相关产品推荐
相关产品推荐

