2015-04-21 2 views
1

Я использовал следующий код для генерации data.frame 'df' из моих исходных данных, 'псевдо'.dplyr трубопровод: сложные функции в сумме

> df<-pseudo %>% group_by(Drug, CLSI_interpretation) %>% 
     summarise(n = n()) %>% 
     filter(Drug %in% c('Cefepime', 'Ceftazidime', 'Piperacillin','Piperacillin/tazobactam','Imipenem','Meropenem','Doripenem','Ciprofloxacin','Levofloxacin','Gentamicin','Tobramycin','Amikacin')) %>% 
     mutate(freq = (n/sum(n)*100)) 

Плюс очень длинная функция mapvalues, которая создает столбец «класс» из «Наркотики».

Все до сих пор; генерирует набор данных, который выглядит следующим образом:

Drug   CLSI n  freq  class 
Amikacin  I 7213 4.25503047 Aminoglycosides 
Amikacin  R 13995 8.25580915 Aminoglycosides 
Amikacin  S 148309 87.48916038 Aminoglycosides 
Cefepime  I 13326 8.87713502 Cephalosporins 
Cefepime  R 9744 6.49098031 Cephalosporins 
Cefepime  S 127046 84.63188468 Cephalosporins 
Ceftazidime  I 10836 5.98558290 Cephalosporins 
Ceftazidime  R 15276 8.43814732 Cephalosporins 
Ceftazidime  S 154923 85.57626978 Cephalosporins 
Ciprofloxacin I 8949 4.74295103 Fluoroquinolones 
Ciprofloxacin R 31563 16.72832309 Fluoroquinolones 

Я борюсь со следующими шагами. Мне нужно сгруппировать эти данные с помощью «класса», а для каждого класса - «n» CLSI% в% c («I», «R») и создать новую частоту ... в основном, n (I + R)/n (I + R + S) и n (S)/n (I + R + S) для каждого класса. Имея много проблем, выясняя функцию обобщения, потому что мне нужно суммировать одну переменную (n) на основе ссылки на другую (CLSI) и сохранять ее сгруппированной третьим (классом). Спасибо за вашу помощь.

+2

В цепочке, подобной 'lhs%>% rhs', оператор'%>% 'представляет собой« Размещение lhs в качестве первого аргумента в вызове rhs ». Таким образом, в вашем случае результат 'group_by (pseudo, class, CLSI)' используется как аргумент '.data' в' summaryize'. Когда вы добавляете «псевдо», это уже не первый аргумент, а один из «...». 'summaryise 'ожидает единственное значение каждого вызова в' ... '. «Результатом» «псевдо», с другой стороны, является целый кадр данных. Таким образом, ошибка. – Henrik

+1

Вы ищете что-то вроде 'df%>% group_by (class)%>% mutate (prop.s = mean (CLSI ==" S "), prop.ir = 1 - prop.s)'? – aosmith

+0

Спасибо @aosmith, но это только печатает 1/3 и 2/3, так как это просто измерение доли записей CLSI S по сравнению с I + R в каждом классе, что составляет 1: 2. Мне нужно это, чтобы суммировать n, связанные с этими CLSI. – jlev514

ответ

6

Всегда полезно показывать полный код, включая чтение данных. Похоже, pseudo - это ваши данные. Синтаксис элементов в трубе %>% немного отличается от обычного R, поскольку первый параметр является неявным содержимым канала. Или просто: удалите «псевдо» из ваших вызовов.

library(dplyr) 
pseudo = read.table("a.csv",header=TRUE) 
pseudo <- pseudo %>% 
    group_by(class, CLSI) %>% summarise(n= n()) 
+1

Спасибо Дитеру! Это отлично работает: вопрос оператора трубопровода. – jlev514