我有一个包含一个“range”列和多个“var”列的数据框(如下所示)。我需要找出每个“range”组中每个“var”列中零的比例。最终目标是为每个var列创建一个图表,显示零的比例随范围的增加而增加。然而,我只是在试图找出零的比例时遇到了麻烦。
以下是一个示例数据集(注意包含NA值):
id <- seq(16)
range <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
var1 <- c(40,1.2,0,0, 1.5,1.6,NA,NA,6,0,9,3,4,0,0,0)
var2 <- c(20,6,7,11, 0,0,0,0,NA,2,3,3,6,9,9,0)
var3 <- c(4,6,0,11, 9,8,7,0,NA,NA,NA,NA,0,0,9,8)
var4 <- c(NA,0,0,NA, 4,6,7,0,0,0,0,0,0,0,9,8)
df <- data.frame(id, range, var1, var2, var3, var4)
我试着创建一个循环来计算每列中零的比例,在dplyr中使用group_by()函数,然后使用mutate()添加一个列来表示该比例,但是我不知道如何使用索引值来表示mutate中的第i列:
for(i in 3:length(ncol(df))){
df_new<-df[ , c(1:2,i)]%>%
group_by(range)%>%
mutate(prop_zero = sum(names(df[,i])==0, na.rm = TRUE)/sum(names(df[,i]))
}
我知道这样做有很多问题,但我不知道如何进行。提前感谢你。
1条答案
按热度按时间zzlelutf1#
我们可以使用
across
来循环'var'列,通过计算reframe
中按'range'分组的逻辑表达式(.x == 0
)的mean
来获得比例