【问题标题】:How to make frequency table for all categorical variables in a dataframe?如何为数据框中的所有分类变量制作频率表?
【发布时间】:2018-10-08 15:25:46
【问题描述】:

我尝试应用 for 循环来获取数据框中每一列的计数。我创建了一个只包含分类变量的频率名称数据框。

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

我收到以下错误

grouped_df_impl(data, unname(vars), drop) 中的错误:列var 未知

【问题讨论】:

标签: r


【解决方案1】:

dplyr::count 需要一个变量时,您正在使用var 作为字符串。要获取变量,请使用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

【讨论】:

    【解决方案2】:

    base 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 将打印完整列表。每个列/变量都是它自己的数据框对象。

    【讨论】:

    • 这个和我的帖子基本一样可以找到here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2021-11-18
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多