R数据帧-用基于条件的计算值替换0

R数据帧-用基于条件的计算值替换0,r,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) 我想做的是用基于x的每个y的平均值替换Cal列中的0。例如,在第1行中,0将替换为1*20+1*26+1*32+1*38/4。y轴上的2和3相同 使用dplyr的解决方案 replacedf$Cal,df$Cal==0,avedf$y*df$x,df$

数据帧:

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)
我想做的是用基于x的每个y的平均值替换Cal列中的0。例如,在第1行中,0将替换为1*20+1*26+1*32+1*38/4。y轴上的2和3相同

使用dplyr的解决方案


replacedf$Cal,df$Cal==0,avedf$y*df$x,df$y,FUN=mean[df$Cal==0]嗨,我想代码应该是replacedf$Cal,df$Cal==0,avedf$y/df$y*df$x,df$y,FUN=mean[df$Cal==0]
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