【问题标题】:Conditional means across columns in RR中跨列的条件均值
【发布时间】: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 &gt; 1992 $ year&lt;1998)

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

【问题讨论】:

  • 您的预期输出是什么?
  • 显然,v1v2 的平均值,对于特定年份。在示例中,是 1992 年到 1998 年的平均值。
  • 那么数字是多少?请将这些添加到您的问题中

标签: r conditional average aggregate-functions mean


【解决方案1】:

使用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 年 2 月 24 日创建。

【讨论】:

  • 谢谢,但我的列名可能不必以v 开头。为简单起见,我按列命名。在我的真实数据框中,列名不必以相同的字母开头。
【解决方案2】:

这在基础R 中也是可能的:

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

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 2018-11-24
    • 2018-11-17
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多