通过几列找到表中每n行的平均值?

时间:2018-03-24 19:57:28

标签: r

我有一个案例表 - 如

    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

2 个答案:

答案 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)