【问题标题】:How to use dplyr to generate a frequency table如何使用dplyr生成频率表
【发布时间】:2016-04-23 23:12:16
【问题描述】:

我喜欢在我的数据框中创建一个具有多列频率的表。我正在复制下面的部分数据框。

该表应该在颜色中具有“红色”和在性别中具有“F”的频率(n 和 %)。

我认为 dplyr 包可以做到这一点,但我无法弄清楚。

谢谢你-

受访者 ID 颜色 性别 1 1503 红色 F 2 1653 北美 3 1982 红色 F 4 4862 红色 NA 15 4880 蓝色 M

【问题讨论】:

  • 多少列?在你的情况下,一个简单的tableprop.table 就可以了。
  • 我有将近 10 列用于两个不同的数据集。我希望获得每个变量(列)的数字(计数和百分比),以创建一个条形图,显示这两个数据集中趋势之间的差异。

标签: r dataframe dplyr frequency


【解决方案1】:
library(dplyr)

df %>%
  count(Color, Gender) %>%
  group_by(Color) %>%          # now required with changes to dplyr::count()
  mutate(prop = prop.table(n))

# Source: local data frame [4 x 4]
# Groups: Color [3]
# 
#    Color Gender     n      prop
#   (fctr) (fctr) (int)     (dbl)
# 1   Blue      M     1 1.0000000
# 2    Red      F     2 0.6666667
# 3    Red     NA     1 0.3333333
# 4     NA      M     1 1.0000000

更新每条评论——如果您想分别查看每个变量,您需要先重新排列数据框。您可以通过tidyr 完成此操作:

library(tidyr)
library(dplyr)

gather(df, "var", "value", -RespondentID) %>%
  count(var, value) %>%
  group_by(var) %>%             # now required with changes to dplyr::count()
  mutate(prop = prop.table(n))

# Source: local data frame [6 x 4]
# Groups: var [2]
# 
#      var value     n  prop
#   (fctr) (chr) (int) (dbl)
# 1  Color  Blue     1   0.2
# 2  Color   Red     3   0.6
# 3  Color    NA     1   0.2
# 4 Gender     F     2   0.4
# 5 Gender     M     2   0.4
# 6 Gender    NA     1   0.2

【讨论】:

  • 我想分别计算列颜色中红色和列性别中女性的频率。这些列是自变量。对于两个不同的数据集,我有近 10 列。我希望获得每个变量(列)的数字(计数和百分比),以创建一个条形图,显示这两个数据集中趋势之间的差异。
  • @Rooz 根据您的评论更新了我的答案。也许您应该发布一个更具体的新问题,以策划成为最终游戏,因为可能有更好的方法来解决该特定问题和结果。此外,听起来提供的示例数据并不能准确地代表相关数据——也许您应该尝试创建一个可重现的示例和/或示例数据集,以最能描述您的数据集的独特挑战。
  • 我将遵循您对我发布的未来问题的建议。非常感谢您的帮助。
  • 我不明白为什么,但我无法复制此输出。我得到整个道具列的比例,而不是上面输出中给出的每组比例。我必须添加 group_by(var) 才能获得指定的输出。我留下这个评论,以防其他人有类似的经历。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多