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