2017-10-20 60 views
0

數據幀計算出的值代替0: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取代0。例如,在第1行中,0將被替換爲(1 * 20 + 1 * 26 + 1 * 32 + 1 * 38)/ 4。y中的2和3相同。

+2

'替換(DF $卡爾,DF $卡爾== 0,AVE(DF $ Y * DF $ X,DF $ Y,FUN =平均值)[DF $卡爾== 0])' –

+1

喜db,我認爲代碼應該讀取替換(df $ Cal,df $ Cal == 0,ave(df $ y/df $ y * df $ x,df $ y,FUN = mean)[df $ Cal == 0 ]) – Kalenji

回答

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