使用 R & dplyr 跨多个列计算出现次数
Count occurence across multiple columns using R & dplyr
这应该是一个简单的解决方案...我无法解决这个问题。我想计算一个因素在数据框的多个列中的出现次数。有 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)
我想要的结果:
- 姓名数
- 阿莫西尔 3
- 氨苄西林 2
- Pip-tazo 2
- 西普罗 1
- 莫西福 1
我试过了:
worksheet %>% group_by (abx.1, abx.2, abx.3) %>% summarise(count = n())
这没有给我想要的输出。任何想法将不胜感激。
如果您想要 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
这应该是一个简单的解决方案...我无法解决这个问题。我想计算一个因素在数据框的多个列中的出现次数。有 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)
我想要的结果:
- 姓名数
- 阿莫西尔 3
- 氨苄西林 2
- Pip-tazo 2
- 西普罗 1
- 莫西福 1
我试过了:
worksheet %>% group_by (abx.1, abx.2, abx.3) %>% summarise(count = n())
这没有给我想要的输出。任何想法将不胜感激。
如果您想要 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