【问题标题】:R: How to split dataframes into groups and apply statisticsR:如何将数据帧分成组并应用统计信息
【发布时间】:2018-03-10 13:48:58
【问题描述】:

我需要计算一些描述性统计数据,例如各种数据帧的中位数、方差和标准差。所有数据帧(大约 300 个)具有相同数量的变量,但观察值的数量与值不同。由于我还不能生成这个循环,我首先尝试在单个数据帧中运行,一个可以生成统计数据的循环,总是将数据帧分成七个观察组。

我正在处理的第一个数据帧是这样生成循环的:

    # A tibble: 363 x 4
          Day Location  Flow    Qty
       <dttm>    <chr> <dbl>   <dbl>
 1 2014-03-03  ABC_100  4948 1637.10
 2 2014-03-04  ABC_100  3916  778.70
 3 2014-03-05  ABC_100  4471  748.40
 4 2014-03-06  ABC_100  5318  888.50
 5 2014-03-07  ABC_100  5888 1607.10
 6 2014-03-08  ABC_100  7490 2515.60
 7 2014-03-09  ABC_100  4306 1569.22
 8 2014-03-10  ABC_100  4939 1287.50
 9 2014-03-11  ABC_100  4988 1547.00
10 2014-03-12  ABC_100  4801 1407.20
# ... with 353 more rows

这是我能够编写的代码。有了它,我需要: 1 - 它将数据框分成 7 个观察组; 2 - 生成基本统计数据:每组的中位数、方差、均值和标准差; 3 - 将此数据存储在收集所有这些统计信息的新数据框中

n <- 1
meanIBI100 <- aggregate(teste, list(rep(1:(nrow(teste) %% n+1), each = n, len = nrow(teste))), median, sd, var)[-1]

我无法让它工作,我找不到方法来告诉我如何解决它。如果有人能帮忙,非常感谢!

即使有人知道如何使循环不仅运行此数据帧,而且运行我拥有的所有数据帧 - 我相信这是另一个循环内的循环的情况,我也谢谢你!

【问题讨论】:

    标签: r dataframe statistics


    【解决方案1】:

    让 DF 成为你的 data.frame

    library(data.table)
    DT <- data.table(DF)
    
    DT
    
    # this will get you your mean and SD's for each column
    DT[, sapply(.SD, function(x) list(mean=mean(x), sd=sd(x)))]
    
    # If we want to add names to the columns 
    wide <- setnames(DT[, sapply(.SD, function(x) list(mean=mean(x), sd=sd(x))], 
    c("ID", sapply(names(DT)[-1], paste0, c(".men", ".SD"))))
    

    参考 里卡多·萨波尔塔 Compute mean and standard deviation by group for multiple variables in a data.frame

    【讨论】:

    • 另外,@Falves,如果你想要 7 人一组,因为你想按周分组,你禁止在 data.table 的第三个“索引”中使用 by = week(Day)
    • 感谢您的回复,阿卜杜勒!但是,在生成统计数据之前,我确实需要将我的数据框分成具有 7 个观察值的组,并且只有在那里,为每个组生成统计数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多