我有一个大的df,看起来像这样。
Name Year Runs Average
J. Doe 2016 432 44.5
J. Doe 2017 325 37.4
J. Bloggs 2016 289 54.3
我想把行合并起来,这样我就可以为每个名字做一个总和,而不是按年份分开。有些列如Runs需要求和,有些列如Average需要其他列的公式。df太大了,我无法手动完成,那么有没有一个函数可以让我在有重复名字的时候将这些行合并起来?
你可以使用 dplyr
:
library(dplyr)
df %>%
group_by(Name) %>%
summarise(sum_of_runs = sum(Runs),
average_of_column_x = mean(column_x, na.rm = TRUE))
如果你想 sum
Runs
纵横 mean
的 Average
列中的每一个独特的值。 Name
,使用 data.table
你可以做:
library(data.table)
setDT(df)[, .(Runs = sum(Runs), Avg = mean(Average)), Name]
# Name Runs Avg
#1: J.Doe 757 41.0
#2: J.Bloggs 289 54.3
添加 na.rm = TRUE
在 sum
和 mean
功能,如果您有 NA
值。
数据
df <- structure(list(Name = c("J.Doe", "J.Doe", "J.Bloggs"), Year = c(2016L,
2017L, 2016L), Runs = c(432L, 325L, 289L), Average = c(44.5,
37.4, 54.3)), class = "data.frame", row.names = c(NA, -3L))