【问题标题】:Cross table with filtered obs on R在 R 上过滤 obs 的交叉表
【发布时间】:2021-12-10 20:19:23
【问题描述】:

我想制作一个交叉表,其中 x 是变量的不同 obs 的数量,y 是另一个变量。使用 dplyr,我可以通过下面的代码获得所需的信息,但它显然不会创建表格。我想要的是 secteurCODE_UAI.x 的不同 obs 的数量。以下是数据集的示例。

CODE_UAI.x secteur
0271564D 1
0942344M 2
0271564D 3
0332894S 3
0033082C 2
00381324H 1
0271564D 3
0033082C 2
  • 输入代码dataframe
df1 <- data.frame("CODE_UAI.x" = c("0271564D", "0942344M", "0271564D", "0332894S",
                                   "0033082C", "00381324H", "0271564D", "0033082C"),
                  secteur = c(1, 2, 3, 3, 2, 1, 3, 2))
Ech_final_nom_BSA %>%
  filter(secteur == 3) %>%
  summarise(n=n_distinct(CODE_UAI.x))

我也尝试使用包 summarytools 执行此操作,但没有结果。

我期待的结果是这样的:

Secteur # distinct UAI
1 2
2 2
3 2

我希望这是有道理的。如果需要,请随时询问更多信息。

【问题讨论】:

  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example
  • 刚刚完成!希望对您有所帮助!
  • 最后一个值 3 怎么样?你在找df %&gt;% group_by(secteur) %&gt;% summarise(distinct = n_distinct(CODE_UAI.x))
  • 你说得对,它应该是 2,是的,这完全有效!

标签: r dataframe dplyr crosstab summarytools


【解决方案1】:

您可以代替使用filter,而是为每个secteur 执行group_by,并使用n_distinct 计算唯一值。

library(dplyr)
df1 %>% group_by(secteur) %>% summarise(n=n_distinct(CODE_UAI.x))

#  secteur     n
#    <dbl> <int>
#1       1     2
#2       2     2
#3       3     2

或者在基础 R 中 -

aggregate(CODE_UAI.x~ secteur, df1, function(x) length(unique(x)))

【讨论】:

    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多