R数据框 - 根据条件

时间:2017-10-20 15:13:43

标签: r

数据框:

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相同。

1 个答案:

答案 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