【问题标题】:How can i aggregate rows of a data.frame by name, summing the numeric value of the correspondent columns on R? [duplicate]如何按名称聚合 data.frame 的行,将 R 上对应列的数值相加? [复制]
【发布时间】:2017-04-05 16:29:50
【问题描述】:

我是 Rstudio 的早期用户,我有一个非常简单的问题,但不幸的是我无法解决它。 我只想按df第一列中包含的单词聚合我的data.frame的行。 data.frame 由五列组成: 第一个是由文字组成的; 第二、第三、第四、第五个是数值。

例如,如果数据是:

SecondWord  X Y Z Q
NO          1 2 2 1
NO          0 0 1 0
YES         1 1 1 1

我希望看到如下结果:

SecondWord  X Y Z Q
NO          1 2 3 1
YES         1 1 1 1

我该怎么办? 我尝试使用以下方法:

test <- read.csv2("test.csv")
df<-aggregate(.~Secondword,data=test, FUN = sum, na.rm=TRUE)

但这些值并不是我期望看到的。 感谢您对未来的帮助,并对“简单”的问题表示抱歉。

【问题讨论】:

  • aggregate(.~SecondWord, test, sum) 为我工作。在申请aggregate之前打印一次test

标签: r dataframe aggregate


【解决方案1】:

你也可以使用tidyverse

library(tidyverse)
df <- test %>%
  group_by(SecondWord) %>%
  summarize_each(funs(sum))

df
# SecondWord     X     Y     Z     Q
#         NO     1     2     3     1
#        YES     1     1     1     1

【讨论】:

    【解决方案2】:

    ddply 应该也可以。

    例如,类似:

    library(plyr)
    grouped <- ddply(test, "Secondword", numcolwise(sum))
    

    【讨论】:

    • 一般来说,您应该确定问题正文中使用的软件包,并参考?ddply 等帮助文件,而不是使用可能在几年后失效的链接。
    • 好吧,我希望 Google 在几年后仍然存在。如果它坏了,请在那里搜索 ddply。
    猜你喜欢
    • 2014-12-29
    • 2020-04-02
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多