使用R和dplyr计算多列中的出现次数

4
这应该是一个简单的解决方案...我只是不能理解它。我想要计算数据框中多个列的一个因子出现的次数。有13列,范围从abx.1到abx.13,并且有大量的行。
样本数据框:
library(dplyr)
 abx.1 <- c('Amoxil', 'Cipro', 'Moxiflox', 'Pip-tazo')
 start.1 <- c('2012-01-01', '2012-02-01', '2013-01-01', '2014-01-01')
 abx.2 <- c('Pip-tazo', 'Ampicillin', 'Amoxil', NA)
 start.2 <- c('2012-01-01', '2012-02-01', '2013-01-01', NA)
 abx.3 <- c('Ampicillin', 'Amoxil', NA, NA)
 start.3 <- c('2012-01-01', '2012-02-01', NA,NA)
 worksheet <-data.frame (abx.1, start.1, abx.2, start.2, abx.3, start.3)

我希望的结果:

  1. 药品名 数量
  2. 阿莫西林 3
  3. 氨苄青霉素 2
  4. 哌拉西林钠/他唑巴坦钠 2
  5. 环丙沙星 1
  6. 莫西沙星 1

我尝试过:

worksheet %>% group_by (abx.1, abx.2, abx.3) %>% summarise(count = n())

这并没有给我想要的输出结果。如果有任何想法,将不胜感激。


2
你的数据无法再现。但是你可能只是在寻找 table(unlist(worksheet[grepl("abx", names(worksheet))])) - David Arenburg
1个回答

7
如果您想使用 dplyr 解决方案,我建议先将数据转换为长格式,然后再与 tidyr 结合使用。
library(tidyr)
worksheet %>%
  select(starts_with("abx")) %>%
  gather(key, value, na.rm = TRUE) %>%
  count(value)

# Source: local data frame [5 x 2]
# 
#        value n
# 1     Amoxil 3
# 2 Ampicillin 2
# 3      Cipro 1
# 4   Moxiflox 1
# 5   Pip-tazo 2

如果使用基本的 R 语言,则只需:

as.data.frame(table(unlist(worksheet[grep("^abx", names(worksheet))])))
#         Var1 Freq
# 1     Amoxil    3
# 2      Cipro    1
# 3   Moxiflox    1
# 4   Pip-tazo    2
# 5 Ampicillin    2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接