数据框:
y <- c(1,2,3,1,2,3,1,2,3,1)
Cal <- c(0,0,0,0,0,1,1,1,1,1)
x <- c(seq(20,38,2))
df <- data.frame(y,x,Cal)
我要做的是将Cal列中的0替换为基于x的每个y的均值。例如,在第1行中,0将被替换为(1 * 20 + 1 * 26 + 1 * 32 + 1 * 38)/ 4. y中的2和3相同。
答案 0 :(得分:1)
使用dplyr
的解决方案。
library(dplyr)
df2 <- df %>%
group_by(y) %>%
mutate(Cal = ifelse(Cal == 0, mean(y * x), Cal))
df2
# A tibble: 10 x 3
# Groups: y [3]
y x Cal
<dbl> <dbl> <dbl>
1 1 20 29
2 2 22 56
3 3 24 90
4 1 26 29
5 2 28 56
6 3 30 1
7 1 32 1
8 2 34 1
9 3 36 1
10 1 38 1