R中跨列的条件均值
Posted
技术标签:
【中文标题】R中跨列的条件均值【英文标题】:Conditional means across columns in R 【发布时间】:2018-08-04 07:10:55 【问题描述】:我有这个数据框:
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 中最有效的方法是什么?
【问题讨论】:
您的预期输出是什么? 显然,v1
和 v2
的平均值,对于特定年份。在示例中,是 1992 年到 1998 年的平均值。
那么数字是多少?请将这些添加到您的问题中
【参考方案1】:
使用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 年 2 月 24 日创建。
【讨论】:
谢谢,但我的列名可能不必以v
开头。为简单起见,我按列命名。在我的真实数据框中,列名不必以相同的字母开头。【参考方案2】:
这在基础R
中也是可能的:
colMeans( df1[ df1$year %in% 1992:1998, -1 ] )
【讨论】:
以上是关于R中跨列的条件均值的主要内容,如果未能解决你的问题,请参考以下文章