R 编写一个函数,将数据过滤并汇总到比例表中

R 编写一个函数,将数据过滤并汇总到比例表中,r,filter,summarize,R,Filter,Summarize,我想创建一个大比例表,其中包括基于一列过滤掉某些值,并输出表中等于0和大于0的值的比例。以下是数据帧(df)的示例: 由此,我想得出b=0或b>0的比例,如果列a>0。供您参考,我可以通过以下代码获取此信息: prop.table(table(df$b[df$a>0]!=0))*100 但是,我想对c列和d列以及e列和f列做同样的处理(相同的模式,这样当c=0和e=0时就可以过滤掉,分别得到d和f的>0和=0比例)。此外,我希望将这些输出都放在一个表中。可能看起来像这样: b

我想创建一个大比例表,其中包括基于一列过滤掉某些值,并输出表中等于0和大于0的值的比例。以下是数据帧(df)的示例:

由此,我想得出b=0或b>0的比例,如果列a>0。供您参考,我可以通过以下代码获取此信息:

prop.table(table(df$b[df$a>0]!=0))*100
但是,我想对c列和d列以及e列和f列做同样的处理(相同的模式,这样当c=0和e=0时就可以过滤掉,分别得到d和f的>0和=0比例)。此外,我希望将这些输出都放在一个表中。可能看起来像这样:

      b.perc   d.perc   f.perc
TRUE   75.00    20.00    66.67
FALSE  25.00    80.00    33.33
      b.perc   d.perc   f.perc
A     100.00    0.00     50.00
B     100.00   50.00    100.00
C     0.00      0.00      0.00
感谢您的帮助。此外,我还想计算G列所列各组的真实百分比,给出如下输出:

      b.perc   d.perc   f.perc
TRUE   75.00    20.00    66.67
FALSE  25.00    80.00    33.33
      b.perc   d.perc   f.perc
A     100.00    0.00     50.00
B     100.00   50.00    100.00
C     0.00      0.00      0.00

我们对备选列进行子集划分,使用每个集合作为
mapply
的输入,根据OP文章中提到的条件获取
表和
属性表

out <- round(mapply(function(x, y) prop.table(table(x[y > 0] != 0)) * 100,
          df[c(FALSE, TRUE)], df[c(TRUE, FALSE)]), 2)
colnames(out) <- paste0(colnames(out), ".perc")
out
#      b.perc d.perc f.perc
#FALSE     25     80  33.33
#TRUE      75     20  66.67
数据
df我给你的数据框只是一个大得多的数据集(大约50个变量)的一部分-除了选择和创建一个新的、更小的数据框之外,我如何调整此脚本以从更大的数据集中拉出特定的列?@Kayla假设你有50列,感兴趣的列是前20列,然后使用
df1好的-只对子集进行尝试(基本上就是我之前介绍的,总共有6列),我遇到了这个错误:
[
的逻辑索引向量长度必须等于列数(或1):*
.data
有6列*索引向量的长度为2sorry-我已经开始工作了。问题是在我创建一个新的较小数据帧时,选择函数(dplyr vs.plyr)出现了问题。这很有效,谢谢!很抱歉发现了问题-顺序略有不同。再次感谢您的帮助
df <- structure(list(a = c(1L, 0L, 1L, 5L, 2L), b = c(2L, 0L, 5L, 1L, 
0L), c = c(3L, 1L, 2L, 2L, 1L), d = c(0L, 0L, 1L, 0L, 0L), e = c(4L, 
2L, 0L, 1L, 0L), f = c(5L, 0L, 0L, 1L, 0L)), class = "data.frame",
row.names = c("1", 
"2", "3", "4", "5"))