【问题标题】:How to aggregate without affecting certain columns in R?如何在不影响 R 中某些列的情况下进行聚合?
【发布时间】:2018-03-23 02:00:38
【问题描述】:

我正在尝试通过计算数据集中每 15 行的平均值来压缩我的数据,方法是这样做:

n<-15
aggregate(df[c("columnC", "ColumnD")],list(rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))),mean)[-1]

这可行,但问题是我还有 2 个其他列是离散值,显然我不能取离散值的平均值,并且上面的代码删除了其他列,只有 columnC 和 columnD。我怎样才能做到这一点,以便对于任何离散值,我只取第 15 行的值?

例如,如果我有这样的数据:

1   Sunday   Evening             16.2  235.84
2   Sunday   Evening             23.4  235.29
3   Sunday   Evening             29.4  232.79
4   Sunday   Evening             24.2  233.89
5   Sunday   Evening             24.2  233.66
6   Sunday   Evening             24.2  233.38
7   Sunday   Evening             24.2  232.99
8   Sunday   Evening             25.4  233.21
9   Sunday   Evening             26.8  232.37
10  Sunday     Night             25.6  231.55
11  Sunday     Night             24.4  231.19
12  Sunday     Night             24.4  231.63
13  Sunday     Night             24.4  231.71
14  Sunday     Night             25.2  231.23
15  Sunday     Night             25.2  231.23

我想取第三列和第四列的平均值,对于第一列和第二列,我会对“星期日”和“晚上”感到满意,因为这些是第 15 行的值。

【问题讨论】:

  • 没关系!我刚刚意识到我可以剪切离散值,每 15 行取离散值,然后将这些列合并在一起!

标签: r dataframe aggregate


【解决方案1】:

为了简单起见,对于您分享的示例,我采用n = 3 并按以下方式使用dplyr

library(dplyr)
n <- 3
df %>%
   group_by(group = rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))) %>%
   summarise(three_mean = mean(V3), 
             four_mean = mean(V4), 
             last_v1 = last(V1), 
             last_v2 = last(V2))


#  group three_mean four_mean last_v1 last_v2
#  <int>      <dbl>     <dbl> <fct>   <fct>  
#1     1       23.0       235 Sunday  Evening
#2     2       24.2       234 Sunday  Evening
#3     3       25.5       233 Sunday  Evening
#4     4       24.8       231 Sunday  Night  
#5     5       24.9       231 Sunday  Night  

这将返回第 3 列和第 4 列的每 3 行的平均值,并获取第 1 列和第 2 列的最后一个值。

对于您的真实示例,如果您将 n 更改为 15,这应该可以工作。

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多