【问题标题】:do calculations for specific rows in R对 R 中的特定行进行计算
【发布时间】:2015-04-16 22:55:37
【问题描述】:

我对 R 很陌生,尝试了很多东西但没有奏效。我的桌子是这样的:

data temp
11.01.15 11am 15 
11.01.15 12am 16
11.01.15 13am 14
12.01.15 11am 13
12.01.15 12am 11
12.01.15 13am 11

它持续了 5192 行和很多天,我必须计算同一天的平均值,测量总是每天进行 3 次。所以我需要一个循环来计算第 1-3、4-6、7-9 行等值的平均值,并跟踪它们并保存在文件中。

【问题讨论】:

    标签: r loops subset


    【解决方案1】:

    如果你总是有 3 个观察值,你可以只计算 temp 在 3 模上的平均值。假设你的数据名为 df

    tapply(df$temp, cumsum(seq(nrow(df)) %% 3 == 1L), mean)
    #        1        2 
    # 15.00000 11.66667 
    

    另一种方法是将data 转换为Date 类并计算其平均值。这是一个使用data.table的示例

    library(data.table)
    setDT(df)[, mean(temp), by = as.Date(data, "%d.%m.%y")]
    #       as.Date       V1
    # 1: 2015-01-11 15.00000
    # 2: 2015-01-12 11.66667
    

    【讨论】:

      【解决方案2】:

      使用dplyr 包及其功能。我猜你有一个名为“day”或“date”的变量和另一个你想要每天表示的变量“x”。代码:

      group_by(data, day) %>% 
        summarize(meanX = mean(x))
      

      将在名为data 的数据集中返回一个平均值为 x 的数据帧。

      【讨论】:

      • 如果时间戳是日期变量的一部分,它将遇到问题。但是substr(day, 1, 8) 会处理它。
      【解决方案3】:

      您可以使用 lapply 来执行此操作

      req.out = do.call(rbind, 
                lapply(split(data, f = data$date), 
                function(x){
                out = mean(x$measurement)
                }))
      

      其中,data 是您的数据框,其中包含您需要计算平均值的日期和列(我在上面将其称为测量值)。

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多