根据该行另一列中的值对列中的值进行操作的更好方法?

时间:2020-07-16 20:08:52

标签: r dplyr

我有一个简单的数据框,由年,月和测量值组成。我想创建一个“规范化”列,该列等于将该时间戳记值除以属于该月的所有度量值的平均值。我以这个循环结束了,但是我敢肯定有一种更干净的方法可以用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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

您可以尝试dplyr

library(dplyr)

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