【问题标题】:Function "diff" over various groups in RR中各个组的功能“差异”
【发布时间】:2011-11-24 09:08:55
【问题描述】:

我有一个包含 2 组 1 个时间变量和一个因变量的数据框。例如:

name <- c("a", "a", "a", "a", "a", "a","a", "a", "a", "b", "b", "b","b", "b", "b","b", "b", "b")
class <- c("c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3","c1", "c1", "c1", "c2", "c2", "c2", "c3", "c3", "c3")
year <- c("2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008", "2010", "2009", "2008")
value <- c(100, 33, 80, 90, 80, 100, 100, 90, 80, 90, 80, 100, 100, 90, 80, 99, 80, 100)

df <- data.frame(name, class, year, value)
df

并希望在“类”和“名称”的每个组合中应用“差异”函数。

我想要的输出应该是这样的:

      name class year value.1
    1    a    c1   2010  -67      
    2    a    c1   2009   47
    3    b    c1   2010  -10
    4    b    c1   2009   20
    ...

我试过了

aggregate(value~name + class, data=df, FUN="diff")

这不会产生我在大型数据集中寻找的解决方案。非常感谢您!

塞巴提安

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    plyr 包将成为您的朋友。函数ddply 采用data.frame,为每个定义的子集应用一个函数,然后返回所有重组片段的data.frame

    最简单的解决方案是对.(class, name) 的每个组合使用summarizediff(value)

    library(plyr)
    ddply(df, .(class, name), summarize, diff(value))
    
       class name ..1
    1     c1    a -67
    2     c1    a  47
    3     c1    b -10
    4     c1    b  20
    5     c2    a -10
    6     c2    a  20
    7     c2    b -10
    8     c2    b -10
    9     c3    a -10
    10    c3    a -10
    11    c3    b -19
    12    c3    b  20
    

    为了让你的年数得到结果,它需要更多的参与:

    ddply(df, .(class, name), summarize, year=head(year, -1), value=diff(value))
       class name year value
    1     c1    a 2010   -67
    2     c1    a 2009    47
    3     c1    b 2010   -10
    4     c1    b 2009    20
    5     c2    a 2010   -10
    6     c2    a 2009    20
    7     c2    b 2010   -10
    8     c2    b 2009   -10
    9     c3    a 2010   -10
    10    c3    a 2009   -10
    11    c3    b 2010   -19
    12    c3    b 2009    20
    

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 2021-07-14
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      相关资源
      最近更新 更多