首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中多变量的频率计数

R中多变量的频率计数
EN

Stack Overflow用户
提问于 2016-07-15 12:33:31
回答 5查看 39.5K关注 0票数 3

我的数据中有多个变量。我想更多地从大型数据集的QA角度来检查的个别频率计数,一些选定的变量更多一些。

代码语言:javascript
复制
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的频率计数,如下所示

代码语言:javascript
复制
Q1 1 - 2
   2 - 2
   3 - 1

Q2 1 - 1
   2 - 3
   3 - 1

我尝试了table(),但是它会导致类似于我不得不多次编写这个函数,这是我想要避免的。

代码语言:javascript
复制
table(df$Q1)
table(df$Q2)

还有其他方法可以做到这一点吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-07-15 12:36:16

您可以将applytable结合使用

代码语言:javascript
复制
apply(df[-1], 2, table)

#  Q1 Q2 Q3
#1  2  1  2
#2  2  3  1
#3  1  1  2

或者,如果您只希望为所选行指定可以使用的名称,则,

代码语言:javascript
复制
apply(df[c("Q1", "Q2")], 2, table)


#  Q1 Q2
#1  2  1
#2  2  3
#3  1  1
票数 5
EN

Stack Overflow用户

发布于 2016-07-15 12:37:08

我们可以使用lapply在列2和3上循环,并获得table

代码语言:javascript
复制
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的namesunlist第2和第3列,并应用table

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-07-15 14:43:15

来自plyr包的计数函数的一个更简单的实现是:

代码语言:javascript
复制
library(plyr) 
var_select = c("Q1", "Q2")
count_freq = count(table, var_select)

使用表函数中的子集也可以得到类似的结果:

代码语言:javascript
复制
var_select = c("Q1", "Q2")
freq_table = as.data.frame(table(subset(table, select = var_select)))

这两种方法都将创建一个包含3列( Q1、Q2、Freq )的freq表。您可以轻松地向var_select添加更多的变量名,而不必更改下一个命令中的任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38396232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档