R中跨列的条件均值
Conditional means across columns in R
我有这个数据框:
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 中最有效的方法是什么?
使用 filter
和 summarise_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。
这在基础 R
:
中也是可能的
colMeans( df1[ df1$year %in% 1992:1998, -1 ] )
我有这个数据框:
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 中最有效的方法是什么?
使用 filter
和 summarise_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。
这在基础 R
:
colMeans( df1[ df1$year %in% 1992:1998, -1 ] )