我需要用相同的city
和time
和tr
的平均值替换没有任何数据的NA值。
我给予一个可重复的例子:
city <- c(rep("PE", 12), rep("BN", 12), rep("CA", 12))
time <- c(rep("T0",6 ), rep("T1", 6), rep("T0",6 ), rep("T1", 6), rep("T0",6), rep("T1", 6))
tr <- c(rep("CN", 3), rep("TN", 3), rep("CN", 3), rep("TN", 3),rep("CN", 3), rep("TN", 3), rep("CN", 3), rep("TN", 3), rep("CN", 3), rep("TN", 3), rep("CN", 3), rep("TN", 3))
values<- c(20, 15,32, 16,42,56, rep(NA, 6), 23, 10,14, 41,34,56, rep(NA, 6), 23, 11,14, 21,35,46, rep(NA, 6))
df <- data.frame(city, time, tr, values)
输出应该是在PE中T1-CN和T1-TN,我想分别用T0-CN和T1-CN的平均值替换NA,
我已经在这篇文章中检查了解决方案:Replace NA with grouped means in R?但这不是我真正需要的。我怎么能这么做呢?非常感谢你的帮助!
3条答案
按热度按时间vshtjzan1#
考虑
ifelse
条件中的ave
,并使用within
提供上下文,其中可以在没有 Dataframe$
限定符的情况下引用列:gab6jxml2#
这是你想要的吗?
a0zr77ik3#
下面是一个
tidyverse
解决方案。按城市和时间分组计算平均值,用以前的非缺失值填写
NA
,只保留新列。使用此结果绑定原始数据框。然后,每当值为NA
时,用平均值替换(mutate
)值。创建于2023-09-17带有reprex v2.0.2