使用 "multiple selection" 变量的频率计数

Frequency counts with a "multiple selection" variable

我有一个包含三个变量的数据框:

  1. ID
  2. 性别(男女)
  3. 药物 (1,2,3,4,5,6,7,8,9,10)

对于“药物”,问卷中可以进行多项选择,因此现在数据框的每个单元格中都有多个数字(以“;”分隔)。 是否可以创建一个频率 table 来单独计算每个数字 (1-10) 并按性别分组?我需要在行中包含“药物”(1-10),并将按性别分组的计数作为列。

我已经尝试拆分列,以便每个单元格只留下一个值。但是我仍然有计算多列值的问题。对于我到目前为止尝试的每个函数,变量都已单独计算。

感谢您的帮助!

Sorry, I don't know how to do it with dput. Here is a screenshot, I hope that helps! (Geschlecht = gender; Medikament = medication

And this is the expected output but without the combinations like "01;03"

如果没有特定的、可重现的示例,像这样的文本解析可能会很困难。但是,听起来您的数据框看起来像这样:

df
#>    ID medication gender
#> 1   1          9      f
#> 2   2      2;1;3      m
#> 3   3        6;2      d
#> 4   4          3      f
#> 5   5    7;8;7;1      f
#> 6   6    6;9;4;6      m
#> 7   7          9      d
#> 8   8      8;6;3      f
#> 9   9        9;7      d
#> 10 10        8;6      m

在这种情况下,以 R 为基数获得结果的简单方式如下所示:

meds <- lapply(split(df, df$gender), 
               function(x) unlist(strsplit(x$medication, ";\s?")))

genders <- rep(c("d", "f", "m"), times = lengths(meds))

table(gender = genders, medication = unlist(meds))
#>       medication
#> gender 1 2 3 4 5 6 7 8 9 10
#>      d 0 1 0 0 0 1 1 0 2  0
#>      f 1 0 2 0 0 1 2 2 1  0
#>      m 1 1 1 1 0 3 0 1 1  0

可重现数据

set.seed(2)

medication <- sapply(rpois(10, 2), function(x) {
  if(x == 0) x <- 1
  x <- sample(1:10, x, TRUE)
  paste(x, collapse = ";")
})

gender <- sample(c("m", "f", "d"), 10, TRUE, prob = c(2, 2, 1))

df <- data.frame(ID = 1:10, medication = medication, gender = gender)

reprex package (v2.0.1)

于 2022-02-06 创建