簡體   English   中英

使用R&dplyr計算多列中的出現次數

[英]Count occurence across multiple columns using R & dplyr

這應該是一個簡單的解決方案...我只是無法解決這個問題。 我想計算一個數據幀的多個列中一個因素的出現。 從abx.1> abx.13一共有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. ip唑2
  5. Cipro 1
  6. Moxiflox 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM