【问题标题】:error in ddply function sum?ddply 函数总和出错?
【发布时间】:2012-11-29 20:03:09
【问题描述】:

第一次在这里发帖!我在使用 ddply 函数时遇到问题。我有这张表,我想使用“LC”列进行总结,并在“Area”列中添加值:

  ID LC  per     Area
1  1  7 0.29  62428.3
2  1  7 0.79 170063.3
3  1  4 0.40  86108.0
4  1  7 0.43  92566.1
5  1  6 1.00 215270.0
6  1  7 0.61 131314.7

基于这个数据框,我希望是这样的:

LC   Area
4  86108.0
6 215270.0
7 456372.4

应用 ddply 函数我得到这些结果:

> ddply(x, 'LC', sum)
  LC       V1
1  4  86113.4
2  6 215278.0
3  7 456406.5

格式是完美的,但值存在一些差异。例如,第 7 类的值应为 456372.4,而 ddply 报告的值为 456406.5。相差34.1。所有值都计算错误。

谁能解释我为什么会遇到这个问题?我在这里错过了什么吗?我的代码错了吗?

谢谢!

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    你的方法有两个问题:

    • 你需要告诉ddply什么来求和(Area)。如果您不指定列,ddply 会将 所有 列(IDperArea)的值相加。
    • 您可以使用 summarise 参数聚合数据。

    此代码有效:

    x <- read.table(text="  ID LC  per     Area
    1  1  7 0.29  62428.3
    2  1  7 0.79 170063.3
    3  1  4 0.40  86108.0
    4  1  7 0.43  92566.1
    5  1  6 1.00 215270.0
    6  1  7 0.61 131314.7", header = TRUE)
    
    
    library(plyr)
    
    ddply(x, .(LC), summarise, sum(Area))
    

    结果:

      LC      ..1
    1  4  86108.0
    2  6 215270.0
    3  7 456372.4
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多