我在R工作,我有一个大的数据框架与许多行和列。下面的数据帧df
是一个最小的例子。
#Example dataframe
row1 <- c(1,2,3,4,5,6,0,8)
row2 <- c(1,0,0,0,10,0,0,0)
row3 <- c(0,1,2,3,4,5,6,0)
df <- t(data.frame(str1,str2,str3))
我想删除具有>4个零值的行,产生以下所需的输出。然而,这必须以高吞吐量的方式完成。
#Desired Output
desired_output <- df[c(1,3),]
看来我需要做两件事。
- 计算每行包含0的列数,并在循环或apply函数中返回此信息。
- 使用这些信息来子集更广泛的数据集。
这是一个无效的尝试
outlist <- list()
for (x in 1:length(rownames(df))) {
out <- sapply(df[x,], function(x){sum(x>0)})
print(out)
append(outlist, out)
}
df %>% filter(rowSums(across(everything(), ~.x==0))<=4)