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