[英]Summing data based on Column in R
我有一個看起來像這樣的數據集(實際數據是 10K x 5K,所以我真的需要一個快捷方式):
簇 | 項目 1 | 項目 2 | 第 3 項 |
---|---|---|---|
1 | 1 | 2 | 2 |
1 | 3 | 1 | 1 |
1 | 1 | 3 | 0 |
2 | 3 | 2 | 0 |
2 | 0 | 0 | 2 |
2 | 4 | 2 | 2 |
3 | 0 | 1 | 1 |
3 | 1 | 1 | 2 |
我想按集群添加每個數據集的列,所以它看起來像這樣:
簇 | 項目 1 | 項目 2 | 第 3 項 |
---|---|---|---|
1 | 5 | 6 | 3 |
2 | 7 | 4 | 4 |
3 | 1 | 2 | 3 |
我想按某一列對它們求和。
您可以使用aggregate
( dat
是您的數據框的名稱):
aggregate(dat[-1], dat["Cluster"], sum)
# Cluster Item1 Item2 Item3
# 1 1 5 6 3
# 2 2 7 4 4
# 3 3 1 2 3
使用data.table
:
library(data.table)
setDT(dat)[ , lapply(.SD, sum), by = Cluster]
# Cluster Item1 Item2 Item3
# 1: 1 5 6 3
# 2: 2 7 4 4
# 3: 3 1 2 3
使用dplyr
:
dat %>%
group_by(Cluster) %>%
summarise_each(funs(sum))
# Cluster Item1 Item2 Item3
# 1 1 5 6 3
# 2 2 7 4 4
# 3 3 1 2 3
謝謝你的回答,我也用過這個好用的,效果很好:
aggregate(. ~ Cluster, data=dat, FUN=sum)
# Cluster Item1 Item2 Item3
# 1 1 5 6 3
# 2 2 7 4 4
# 3 3 1 2 3
嘗試:
> sapply(ddf[-1], function(x) tapply(x,ddf$Cluster,sum))
Item1 Item2 Item3
1 5 6 3
2 7 4 4
3 1 2 3
如果要總結所有varibales除了分組,利用across
在dplyr
df <- read.table(text = "Cluster Item1 Item2 Item3
1 1 2 2
1 3 1 1
1 1 3 0
2 3 2 0
2 0 0 2
2 4 2 2
3 0 1 1
3 1 1 2", header = T)
df %>% group_by(Cluster) %>% summarise(across(everything(), ~sum(.)))
# A tibble: 3 x 4
Cluster Item1 Item2 Item3
<int> <int> <int> <int>
1 1 5 6 3
2 2 7 4 4
3 3 1 2 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.