我的数据中有多个变量。我想更多地从大型数据集的QA角度来检查的个别频率计数,一些选定的变量更多一些。
ID Q1 Q2 Q3
1 1 2 3
2 2 1 2
3 3 2 1
4 1 2 3
5 2 3 1因此,我应该得到我选择的变量Q1 & Q2的频率计数,如下所示
Q1 1 - 2
2 - 2
3 - 1
Q2 1 - 1
2 - 3
3 - 1我尝试了table(),但是它会导致类似于我不得不多次编写这个函数,这是我想要避免的。
table(df$Q1)
table(df$Q2)还有其他方法可以做到这一点吗?
发布于 2016-07-15 12:36:16
您可以将apply与table结合使用
apply(df[-1], 2, table)
# Q1 Q2 Q3
#1 2 1 2
#2 2 3 1
#3 1 1 2或者,如果您只希望为所选行指定可以使用的名称,则,
apply(df[c("Q1", "Q2")], 2, table)
# Q1 Q2
#1 2 1
#2 2 3
#3 1 1发布于 2016-07-15 12:37:08
我们可以使用lapply在列2和3上循环,并获得table。
lapply(df1[paste0("Q", 1:2)], table)
#$Q1
#1 2 3
#2 2 1
#$Q2
#1 2 3
#1 3 1 或者没有任何循环,通过dataset的replicate 2和3的names,unlist第2和第3列,并应用table。
table(rep(names(df1)[names(df1) %in% c("Q1", "Q2")],nrow(df1)),
unlist(df1[paste0("Q", 1:2)]))
# 1 2 3
# Q1 2 2 1
# Q2 1 3 1发布于 2016-07-15 14:43:15
来自plyr包的计数函数的一个更简单的实现是:
library(plyr)
var_select = c("Q1", "Q2")
count_freq = count(table, var_select)使用表函数中的子集也可以得到类似的结果:
var_select = c("Q1", "Q2")
freq_table = as.data.frame(table(subset(table, select = var_select)))这两种方法都将创建一个包含3列( Q1、Q2、Freq )的freq表。您可以轻松地向var_select添加更多的变量名,而不必更改下一个命令中的任何内容。
https://stackoverflow.com/questions/38396232
复制相似问题