如何为数据框中的所有类别变量制作频率表?

时间:2018-10-08 15:25:47

标签: r

我尝试申请循环以获取数据帧中每一列的计数。我创建了一个频率名称数据框,其中只包含分类变量。

 n <- names(freq)
for(var in n){
  count(freq,var)
}

我收到以下错误

  

grouped_df_impl(数据,未命名(变量),删除)中的错误:列var   未知

2 个答案:

答案 0 :(得分:2)

var需要一个变量时,您正在使用dplyr::count作为字符串。要获取变量,请使用get
在此示例中,数据帧freq将是内置的int数据集iris

freq <- iris

n <- names(freq)
n <- n[sapply(n, function(var) is.factor(freq[[var]]))]

for(var in n){
  cnt <- dplyr::count(freq, get(var))
  print(cnt)
}
## A tibble: 3 x 2
#  `get(var)`     n
#  <fct>      <int>
#1 setosa        50
#2 versicolor    50
#3 virginica     50

答案 1 :(得分:0)

基数R中的table函数确实有助于创建分类变量的计数。但是,输出是一个特定的表对象-因此,R中几乎所有后续函数都无法识别出该输出,而该函数将被证明是有用的(ggplotkable等)。

这是一个函数,该函数创建一个包含因子中每个级别的计数的列表,并将其转换为数据帧。

#df should be a data structure containing the factors of interest
freqList = lapply(df, 
              function(x) {

                  my_lst = data.frame(table(x))
                  names(my_lst) = c("level", "n")

                  return(my_lst) 
                    }
                )
freqList

呼叫freqList将打印完整列表。每个列/变量将是其自己的数据框对象。