如何在R中基于现有列按类别计算起止值差值并生成新数据集
解决方法
首先,把你的数据集转换成可直接运行的R代码:
df <- tibble( Day = c(1, 3, 1, 4, 1, 2, 5), Category = c("A", "A", "B", "B", "C", "C", "C"), Value = c(0.5, 0.1, 1, 0.7, 1.2, 1, 0.9) )
你需要按类别聚合计算Day1与最后一天的Value减少量,用dplyr的group_by() + summarize()比mutate()更合适(mutate()会保留原数据所有行,而你需要每个类别一行的结果)。具体代码如下:
library(dplyr) # 按类别分组计算差值 result <- df %>% group_by(Category) %>% summarize( 差值 = Value[Day == 1] - Value[Day == max(Day)] ) # 查看结果 print(result)
代码解释
group_by(Category):将数据按Category分组,后续操作均针对单个类别执行summarize():对每个分组进行聚合计算,输出每个类别一行的结果Value[Day == 1]:提取当前类别中Day为1的Value值(每个类别仅一条Day1数据)Value[Day == max(Day)]:提取当前类别中Day最大的那条数据的Value值- 两者相减得到从Day1到最后一天的Value减少量
运行后会得到如下结果:
# A tibble: 3 × 2 Category 差值 <chr> <dbl> 1 A 0.4 2 B 0.3 3 C 0.3
内容的提问来源于stack exchange,提问作者zaneeto
相关产品推荐
相关产品推荐

