R 编写一个函数,将数据过滤并汇总到比例表中
我想创建一个大比例表,其中包括基于一列过滤掉某些值,并输出表中等于0和大于0的值的比例。以下是数据帧(df)的示例: 由此,我想得出b=0或b>0的比例,如果列a>0。供您参考,我可以通过以下代码获取此信息: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
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"))