按行值分组

时间:2017-02-24 15:50:05

标签: r group-by

我的表格结构如:Year,Month,ValueA,ValueB,ValueC等。我想按年份和月份对表格进行分组,但是根据列值的差异进行汇总。

Year Month ValueA ValueB ValueC
2016  1      40     53     49
2017  2      29     31     26
2016  1      25     20     31
2017  2      22     30     29

我想输出一个看起来像的表:

Year Month ValueA ValueB ValueC
2016  1      15     33     18
2017  2      7       1      3

我该怎么做?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

我们可以使用基础R aggregateYearMonth分组来计算两行之间的差异。

abs(aggregate(.~Year + Month, df, diff))

#  Year Month ValueA ValueB ValueC
#1 2016     1     15     33     18
#2 2017     2      7      1      3

答案 1 :(得分:2)

以下是使用dplyr包的方法:

library(tidyverse)
df <- data.frame(Year = c(2016, 2017, 2016, 2017),
             Month = c(1, 2, 1, 2),
             ValueA = c(40, 29, 25, 22),
             ValueB = c(53, 31, 20, 30),
             ValueC = c(49, 26, 31, 29))

df1 <- df %>%
  group_by(Year, Month) %>%
  summarize(ValueA = abs(diff(ValueA)), ValueB = abs(diff(ValueB)), ValueC = abs(diff(ValueC)))

答案 2 :(得分:1)

您可以使用plyr使用ddply(df, .(Year, Month), numcolwise(diff)) 中描述的方法:

VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"