【问题标题】:Use R's Table function to cross-tabulate data grouped by another variable使用 R 的 Table 函数对按另一个变量分组的数据进行交叉制表
【发布时间】:2021-11-11 19:50:09
【问题描述】:

背景

这是一个数据框d

d <- data.frame(ID = c("a","a","b","b"),                  
                product_code = c("B78","X31","C12","C12"),
                multiple_products = c(1,1,0,0),
                stringsAsFactors=FALSE)

问题和我想要什么

我正在尝试使用基本Rtable 函数制作multiple_products 的交叉制表式频率表,但我想通过ID 而不是按行这样做。这就是我要找的东西:

0 1 
1 1 

换句话说,一个表显示“有 1 个ID multiple_products 等于 0,还有 1 个 ID 等于 1”。

我的尝试

到目前为止,这是我使用dplyr 的尝试:

dtable <- d %>%
  group_by(ID) %>%
  table(d$multiple_products) %>%
  ungroup()

这段代码在我的真实数据集上运行没有错误,但它给了我与table(d$multiple_products) 相同的结果,即:

0 1 
2 2 

表示“multiple_products 等于 0 的 2 行,等于 1 的 2 行”。

在我在这里给你的玩具示例中,这段代码甚至没有运行,给我以下错误:

Error: Can't combine `ID` <character> and `multiple_products` <double>.

有什么想法吗?

【问题讨论】:

    标签: r dplyr crosstab


    【解决方案1】:

    我们需要按组检查n_distinct

    library(dplyr)
    d %>% 
        group_by(multiple_products) %>% 
        summarise(n = n_distinct(ID))
    

    -输出

    # A tibble: 2 x 2
      multiple_products     n
                  <dbl> <int>
    1                 0     1
    2                 1     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 2016-09-15
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多