【问题标题】:Better way to operate on a value in a column based on the value in another column of that row?根据该行的另一列中的值对列中的值进行操作的更好方法?
【发布时间】:2020-07-16 20:08:52
【问题描述】:

我有一个由年、月和测量值组成的简单数据框。我想创建一个“标准化”列,该列等于将该时间戳值除以属于同一月份的所有测量值的平均值。我结束了这个循环,但我确信有一种更清洁的方法可以使用 tidyverse 中的一些东西来完成它

for (i in 1:nrow(my_data)){
  my_data[i,"Normalized"] <- my_data[i, "MERRA2"]/ mean_monthly[[my_data[i,"Month"]]]
}

mean_monthly 在哪里

mean_monthly <- apply(merra2_data[,2:13], 2, mean, na.rm=T)

数据帧的头部

  Year Month   MERRA2 Normalized
1 2000     1 7.217474  1.0267520
2 2000     2 7.700417  1.0625818
3 2000     3 8.004980  1.0532328
4 2000     4 7.994653  0.9930986
5 2000     5 8.317802  1.1213321
6 2000     6 6.734449  0.9501416

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用 dplyr
    我创建了一个示例数据集并使用 dplyr

    计算了所需的输出
    df <- data.frame(Year = rep(2000:2004, each=60),
                     Month= rep(1:12, 5, each=5),
                     MERRA2= 1:300)
    df1 <- df %>% group_by(Year, Month) %>% mutate(Normalised = MERRA2/mean(MERRA2))
    

    【讨论】:

      【解决方案2】:

      你可以试试dplyr:

      library(dplyr)
      
      my_data <- my_data %>%
        group_by(Year, Month) %>%
        mutate(Normalized = MERRA2/mean(MERRA2))
      

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 2020-09-26
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多