dplyr

2016-03-23 21 views
1

ile R içinde toplama ve sayma Değişken fiyatın 0, 49'a eşit sayıda elemanını saymak istiyorum ya da başka bir şey saymak istiyorum, ancak fiyatın kaç olduğunu umursamıyorum bu durum. 1, 1, 2, 1, 1 ve bu I sonrası: bu seferki 0 veya İşte bu sayıyı istiyorumdplyr

terminal <- c("a", "b", "a", "c", "b", "b") 
price <- c(0, 49, 3.5, 0, 17, 32) 
df <- data.frame(terminal, price) 

df %>% 
group_by(terminal, price) %>% 
summarise(count = n()) 

49 eşit değilse Ben terminal tarafından fiyatın ortalama yapmak istiyorum '' sıfır 'veya' 49 'değerine eşit değilse, terminalin ortalama fiyatını almak isterim.

+0

(%in% ve olumsuzluk ! kullanılarak) Belki% df>% group_by (terminal, gr = 1 + 2 * (fiyat == 0) + 4 * (fiyat == 49))%>% mutasyon (n = n())%>% özetler (n = n [1], Ort = ortalama (fiyat [! (fiyat% c (0,49))], na.rm = TRUE)) – akrun

+0

Fiyat ile beklenen fiyatı gösterebilir – akrun

+0

Bu tam olarak aynıdır İstediğim şey çok teşekkürler, sadece bana bu satırı anlatabilir misiniz lütfen? gr = 1 + 2 * (fiyat == 0) + 4 * (fiyat == 49) ** Etkileyici teşekkürler Tekrar teşekkürler –

cevap

3

' 0 've' 49 'değerlerine göre' fiyat 'olan bir gruplama değişkeni oluşturmamız gerekiyor. Bunun için ==, 0 ve 49 ile bir mantıksal indeks elde etmek, bir aritmetik yapmak için bir yol olurdu, böylece 0, biri 49, ve diğerleri için 3 grup bir tane olacak. 'Terminal' göre gruplanmış 'gr' satır 'n', yani nedeniyle, summarise numarasını almak için ve 0 ya da 49 değildir 'fiyat' arasında mean

library(dplyr) 
df %>% 
    group_by(terminal, gr= 1+2*(price==0)+4*(price==49)) %>% 
    summarise(n=n(), 
       Avg = mean(price[!(price %in% c(0,49))], na.rm=TRUE))