我有像这样的数据:替换非零的列平均多个列中的值
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