r - 合并行 - 在 R 中对某些列求和而不对其他列求和

标签 r split-apply-combine

我有一个数据集,其中第 1 列中有重复的名称,然后是其他 3 个数字列。

我想将重复名称的行合并为一列,并对其中的两列求和,同时保留另一列。有没有简单的方法可以做到这一点?我一直在尝试用 sapply 和 lapply 来解决这个问题,并且在这里阅读了很多问答,但似乎找不到解决方案

Name <- c("Jeff", "Hank", "Tom", "Jeff", "Hank", "Jeff",
                       "Jeff", "Bill", "Mark")
data.Point.1 <- c(3,4,3,3,4,3,3,6,2)
data.Point.2 <- c(6,9,2,5,7,4,8,2,9)
data.Point.3 <- c(2,2,8,6,4,3,3,3,1)
data <- data.frame(Name, data.Point.1, data.Point.2, data.Point.3)

数据如下所示:

  Name data.Point.1 data.Point.2 data.Point.3
1 Jeff            3            6            2
2 Hank            4            9            2
3  Tom            3            2            8
4 Jeff            3            5            6
5 Hank            4            7            4
6 Jeff            3            4            3
7 Jeff            3            8            3
8 Bill            6            2            3
9 Mark            2            9            1

我想让它看起来像这样(将第 3 列和第 4 列相加并单独保留第 1 列。我希望它看起来像这样:

  Name data.Point.1 data.Point.2 data.Point.3
1 Jeff            3           23           14
2 Hank            4           16            6
3  Tom            3            2            8
8 Bill            6            2            3
9 Mark            2            9            1

任何帮助都会很棒。谢谢!

最佳答案

另一种更直接的解决方案是使用库 dplyr

library(dplyr)
data <- data %>% group_by(Name, data.Point.1) %>%  # group the columns you want to "leave alone"
  summarize(data.Point.2=sum(data.Point.2), data.Point.3=sum(data.Point.3)) # sum columns 3 and 4

如果你想对所有其他列求和,除了那些你想“单独留下”的列,然后替换 summarize(data.Point.2=sum(data.Point.2), data.Point.3=sum (data.Point.3))summarise_each(funs(sum))

关于r - 合并行 - 在 R 中对某些列求和而不对其他列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130324/

相关文章:

r - ddply + summarise 用于在大量列中重复相同的统计函数

r - 如何将因子转换为数字二进制变量?

r - 如何将 Curry() 与 Vectorize() 结合起来?

r - 从R中的列表写表

Swift Combine - 数组上的前缀发布者

pandas split-apply-combine 创建不需要的多重索引

python - Pandas 适用于参数列表

r - 你如何让 x-lab 标签变成斜体而不是 y-lab 标签? (在R)

r - 如何使用 R 中的聚合函数计算数据框中的平均值?