从数据帧,是否有聚集(一个简单的方法sum,mean,max同时等c)中多个变量?
以下是一些示例数据:
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05))
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Run Code Online (Sandbox Code Playgroud)
我想同时按年和月汇总数据框中的变量x1和x2变量df2.以下代码聚合x1变量,但是是否也可以同时聚合x2变量?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
我有一个2列和3659行的数据框 df
我试图通过平均此数据框中的每10行或13行来减少数据集,所以我尝试了以下方法:
# number of rows per group
n=13
# number of groups
n_grp=nrow(df)/n
round(n_grp,0)
# row indices (one vector per group)
idx_grp <- split(seq(df), rep(seq(n_grp), each = n))
# calculate the col means for all groups
res <- lapply(idx_grp, function(i) {
# subset of the data frame
tmp <- dat[i]
# calculate row means
colMeans(tmp, na.rm = TRUE)
})
# transform list into a data frame
dat2 <- as.data.frame(res)
Run Code Online (Sandbox Code Playgroud)
但是,我不能将行数除以10或13,因为数据长度不是拆分变量的倍数.所以我不确定应该做什么(我只想要计算最后一组的平均值 - 即使少于10个元素)
我也试过这个,但结果是一样的:
df1=split(df, sample(rep(1:301, 10)))
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的data.frame:
Geotype <- c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3)
Strategy <- c("Demand", "Strategy 1", "Strategy 2", "Strategy 3", "Strategy 4", "Strategy 5", "Strategy 6")
Year.1 <- c(1:21)
Year.2 <- c(1:21)
Year.3 <- c(1:21)
Year.4 <- c(1:21)
mydata <- data.frame(Geotype,Strategy,Year.1, Year.2, Year.3, Year.4)
Run Code Online (Sandbox Code Playgroud)
我想总结每一年的每项战略.
这意味着我需要在数据框中的每一列下面加6行,然后跳过Demand行.然后我想对所有专栏(40年)重复这一点.
我希望输出数据框看起来像这样:
Geotype.output <- c(1, 2, 3)
Year.1.output <- c(27, 69, 111)
Year.2.output <- c(27, 69, 111)
Year.3.output <- c(27, 69, 111) …Run Code Online (Sandbox Code Playgroud)