Суммирование данных на основе столбца в R
Я новичок в R, и у меня есть набор данных, который выглядит следующим образом (фактические данные 10K на 5K, поэтому мне действительно нужен короткий путь):
Cluster Item1 Item2 Item 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
Я хочу добавить столбцы каждого набора данных по кластеру, чтобы он выглядел так:
Cluster Item1 Item2 Item 3
1 5 6 3
2 7 4 4
3 1 2 3
Я хочу суммировать их по определенной колонке. Спасибо заранее.
4 ответа
Ты можешь использовать 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
Если вы хотите суммировать все варианты, кроме группировки, используйте
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