R同时使用sumCol和聚合

6jygbczu  于 2022-12-20  发布在  其他
关注(0)|答案(4)|浏览(131)

是否有一种很好的方法来汇总和聚合以下 Dataframe :

Persons     item1, item2, item3, ....
1           0      1      3      ....
1           2      2      4      ....
2           1      2      4      ....
3           0      1      1      ....
1           1      1      1      ....
...         ...    ...    ...    ....

收件人:

Persons  Items
1        15
2        7
3        2
...      ...

所以基本上把每个人的所有项目加起来,然后把这个和加到另一行(如果那个人有另一行的话)。

cunj1qz1

cunj1qz11#

这里有一个方法:

library(dplyr)

Persons <- c(1, 1, 2, 3, 1)
item1 <- c(0, 2, 1, 0, 1)
item2 <- c(1, 2, 2, 1, 1)
item3 <- c(3, 4, 4, 1, 1)

data_1 <- data.frame(Persons, item1, item2, item3)

data_1$Items_raw <- rowSums(data_1[,2:4])
data_1 <- data_1 %>% group_by(Persons) %>% summarize(Items = sum(Items_raw))
lb3vh1jj

lb3vh1jj2#

在R进制中你可以用tapply ...

tapply(rowSums(df[,-1]), df[,1], sum)

 1  2  3 
15  7  2
2jcobegt

2jcobegt3#

您可以使用dplyr包。

library(dplyr)

df <- data.frame(
  Persons = c(1, 1, 2, 3, 1),
  item1 = c(0, 2, 1, 0, 1),
  item2 = c(1, 2, 2, 1, 1),
  item3 = c(3, 4, 4, 1, 1)
)

df %>% 
  group_by(Persons) %>% 
  summarise(items = sum(item1, item2, item3))

您将获得:

# A tibble: 3 x 2
  Persons items
    <dbl> <dbl>
1       1    15
2       2     7
3       3     2
rdlzhqv9

rdlzhqv94#

感谢大家对我帖子的反馈(谢谢大家!),我找到了解决问题的方法。我用以下方法解决了这个问题:

People = data.frame(People$Persons, 
rowSums(People[, 2:522]))
colnames(People) = c("Persons", "Items")
People = ddply(People, "Persons", numcolwise(sum))

这不是一个漂亮的解决方案(希望我能在1行中完成),但它有效!

相关问题