我有像這樣的數據:替換非零的列平均多個列中的值
aye <- c(0,0,3,4,5,6)
bee <- c(3,4,0,0,7,8)
see <- c(9,8,3,5,0,0)
df <- data.frame(aye, bee, see)
我正在尋找一種簡潔的方式來創建基於平均每個數據幀中的列列,其中零保持在零。
爲了獲得不包括零均值:
df2 <- as.data.frame(t(apply(df, 2, function(x) mean(x[x>0]))))
我無法弄清楚如何簡單地用平均不包括零替換列中的值。我的做法迄今:
df$aye <- ifelse(df$aye == 0, 0, df2$aye)
df$bee <- ifelse(df$bee == 0, 0, df2$bee)
df$see <- ifelse(df$see == 0, 0, df2$see)
但是,這就會變得混亂諸多變數 - 將是不錯的包裹起來的一個功能。
感謝您的幫助!
簡明扼要。保持偉大的工作! – akrun
或者另一個選項是'lapply(df,function(u)(!! u)* mean(u [u> 0]))' – akrun
是的,這是一個雙重否定,第一個否定給出0值TRUE,所以再次取消使其成爲假,但我想你的版本好多了 – akrun