我有一个案例表 - 如
date v1 v2
1991 1 2
1991 1 3
1991 2 1
1991 2 3
1992 1 1
etc
我需要找到每2行具有相同日期-v1
的v2的均值我不知道,因为我知道
aggregate(df$v2, by = list(df$date), mean)
但是我的任务不同,作为输出我需要像
这样的东西 date v1 v2
1991 1 2.5
1991 2 2
1992 1 1
etc
答案 0 :(得分:1)
聚合(df $ v2,by = list(df $ date),mean)
您可以修改此项并将其扩展为多个变量以解决您的问题:
aggregate(df, by = list(df$date,df$v1), mean)
答案 1 :(得分:0)
在这种情况下,使用rollapply
包中的zoo
函数非常方便。
library(zoo)
z <- zoo(df)
#width = 2, by = 2 for adjacent rows.
rollapply(z, 2, mean, na.rm=TRUE, by = 2, partial = TRUE)
# date v1 v2
# 1 1991 1 2.5
# 3 1991 2 2.0
# 5 1992 1 1.0
<强>更新强>
似乎OP想要为他选择的每个mean
行计算n
。这样就可以避免使用v1
列。
使用dplyr
的一个选项可以是:
library(dplyr)
n <- 2 #It can be set as 3, 4 etc. Number of row for which mean is needed
df %>%
group_by(date, everyN = ceiling(row_number()/n)) %>%
summarise(v2 = mean(v2, na.rm = TRUE))
数据强>
df <- read.table(text =
"date v1 v2
1991 1 2
1991 1 3
1991 2 1
1991 2 3
1992 1 1", header = T)