R中的列之间的条件均值

时间:2018-02-24 09:17:16

标签: r conditional average aggregate-functions mean

我有这个数据框:

year<-1990:2000
v1<-1:11
v2<-20:30
df1<-data.frame(year,v1, v2)

我想计算所有列的平均值,但第一个基于条件(在我的情况下,放在第一列的条件下)

我想做类似的事情:

colMeans(df1[,-1], condition is: year > 1992 $ year<1998)

如果列数太大,R中最有效的方法是什么?

2 个答案:

答案 0 :(得分:2)

使用filtersummarise_at

library(tidyverse)

year <- 1990:2000
v1 <- 1:11
v2 <- 20:30
df1 <- data.frame(year, v1, v2)

df1 %>% 
  filter(year < 1998 & year > 1992) %>% 
  summarise_at(vars(starts_with("v")), funs(mean(., na.rm = TRUE)))
#>   v1 v2
#> 1  6 25

或计算所有列的mean,然后删除year

df1 %>% 
  filter(year < 1998 & year > 1992) %>% 
  summarise_all(funs(mean(., na.rm = TRUE))) %>% 
  select(-year)

reprex package(v0.2.0)创建于2018-02-24。

答案 1 :(得分:2)

这也可以在R基地:

colMeans( df1[ df1$year %in% 1992:1998, -1 ] )