【问题标题】:R join same row and calculate mean value [duplicate]R加入同一行并计算平均值[重复]
【发布时间】:2016-01-04 12:51:29
【问题描述】:

我有一个如下所示的数据框:

data<-data.frame(y=c(1,1,2,2,3,4,5,5),x=c(5,5,10,10,5,10,5,5))

  y  x
1 1  5
2 1  5
3 2 10
4 2 30
5 3  5
6 4 10
7 5  4
8 5  8

如何合并 y 列中具有相同值的行并将 x 列值修改为它们的平均值。

我想要这样的东西:

  y  x
1 1  5
2 2 20
3 3  5
4 4 10
7 5  6

我正在尝试:

unique(data)

但它会删除这些值,而不是对同一行进行平均。

【问题讨论】:

  • 我想实际的欺骗应该是this。但谁在乎,对吧?反正没人再用谷歌了。
  • @DavidArenburg 既然 SO 上的乐于助人的人会立即为您提供量身定制的答案,为什么还要谷歌呢?

标签: r join dataframe


【解决方案1】:

dplyr 很容易。喜欢这里:

library("dplyr")

data %>% 
    group_by(y) %>% 
    summarise(x=mean(x))

【讨论】:

  • 添加 y 以总结完整的输出。即summarize(y, x=mean(x))
  • @Tal J. Levy,我认为没有必要。 y 已经在那里了。
  • 不会在summary之后。
  • 我已经检查过了,它就在那里。这是因为y 是一个分组变量。
  • 当然,抱歉我忘了分组。你是对的。
【解决方案2】:

我们可以使用aggregate

aggregate(x~y, data, mean)

【讨论】:

    【解决方案3】:

    用户plyr。

    # Create dummy data.
    nel = 30
    df <- data.frame(x = round(5*runif(nel)), y= round(10*runif(nel)))
    
    # Summarise means
    require(plyr)
    df$x <- as.factor(df$x)
    res <- ddply(df, .(x), summarise, mu=mean(y))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2020-04-06
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多