R 带条件的插补值单元格
我有这个数据框:R 带条件的插补值单元格,r,R,我有这个数据框: df <- data.frame( Date = c("2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-25"), idx = c(1, 2, 3, 4,5, 6, 3), Temp = c(2, 5, 12, 12,12, 1, 5),
df <- data.frame( Date = c("2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-23", "2017-02-25"),
idx = c(1, 2, 3, 4,5, 6, 3),
Temp = c(2, 5, 12, 12,12, 1, 5),
idy= c(1, 3, 1, 6, 2, 5, 9))
但平均值的计算方法不正确。该值为7.33,而不是2.66。如果我正确理解了您的意思,并且如果没有更多的边缘案例,则该值应该有效
library(dplyr)
df %>%
mutate(Temp = replace(Temp, Temp > 10, mean(Temp[idx %in% idy[Temp > 10]])))
# Date idx Temp idy
#1 2017-02-23 1 2.000000 1
#2 2017-02-23 2 5.000000 3
#3 2017-02-23 3 2.666667 1
#4 2017-02-23 4 2.666667 6
#5 2017-02-23 5 2.666667 2
#6 2017-02-23 6 1.000000 5
#7 2017-02-25 3 5.000000 9
我们也可以直接这样做
with(df, replace(Temp, Temp > 10, mean(Temp[idx %in% idy[Temp > 10]])))
#[1] 2.000000 5.000000 2.666667 2.666667 2.666667 1.000000 5.000000
逻辑是通过首先查找其相应的
idy
值,然后idx
并获得这些Temp
值的平均值来替换所有大于10的Temp
值 抱歉,这个错误仍然不起作用,仍然不清楚为什么2+5+1?这确实有效,但它需要在(日期)之前进行分组,不是吗?。df%>%组由(日期)%>%突变(温度=替换(温度,温度>10,平均值(温度[idx%以%idy为单位[Temp>10])))@s157 ohh..ok。我不知道你是按日期分组的。是的,如果需要,您可以按(日期)添加组。
library(dplyr)
df %>%
mutate(Temp = replace(Temp, Temp > 10, mean(Temp[idx %in% idy[Temp > 10]])))
# Date idx Temp idy
#1 2017-02-23 1 2.000000 1
#2 2017-02-23 2 5.000000 3
#3 2017-02-23 3 2.666667 1
#4 2017-02-23 4 2.666667 6
#5 2017-02-23 5 2.666667 2
#6 2017-02-23 6 1.000000 5
#7 2017-02-25 3 5.000000 9
with(df, replace(Temp, Temp > 10, mean(Temp[idx %in% idy[Temp > 10]])))
#[1] 2.000000 5.000000 2.666667 2.666667 2.666667 1.000000 5.000000