2017-08-19 157 views
-2

我想了解如何完成「group by」和「count」功能。我看了好幾篇文章,沒有找到我想要的東西;如果有已經發布的答案,我會很感激鏈接。是否存在與SELECT ... COUNT(*)... GROUP BY ...等價的等價物?

例如,我正在查找數據中的異常值;我想知道哪些地方收到的最「壞」的措施:

place = rep(c('AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI'), times=4) 
measure = rep(c('meas1','meas2','meas3','meas4'), each=11) 
set.seed(200) 
rating = sample(c('good','bad'), size = 44, prob=c(2,1), replace=T) 
df = data.frame(place, measure, rating) 

> df 
    place measure rating 
1  AL meas1 good 
2  AK meas1 good 
3  AZ meas1 good 
4  AR meas1 bad 
5  CA meas1 bad 
6  CO meas1 bad 
7  CT meas1 bad 
8  DE meas1 good 
9  FL meas1 good 
10 GA meas1 good 
     ....(etc)..... 

我想了解如何使用tidyverse做到這一點。這種方法使用sqldf給我我想要的東西,也就是告訴我哪些地方過的最「壞」的收視率,並通過他們的「壞性」

library(sqldf)  
sqldf("SELECT place, rating, COUNT(*) AS Count FROM df GROUP BY place, rating ORDER BY rating, count DESC"). 

    place rating Count 
1  CA bad  3 
2  AK bad  2 
3  AR bad  1 
4  CO bad  1 
5  CT bad  1 
6  DE bad  1 
7  FL bad  1 
8  GA bad  1 
9  AL good  4 
10 AZ good  4 
11 HI good  4 
    ....(etc).... 

居的地方有沒有辦法做得到類似的結果在tidyverse?

+1

嘗試'df%>%count(place,rating)%>%arrange(rating,desc(n))' –

+0

你能解釋一下嗎?它當然是做我希望的。 – cumin

+3

嘗試使用'?count','?arrange'和'?desc' ..閱讀手冊可能會幫助您學到一兩件事 –

回答

1

對於在tidyverse,我建議你閱讀韋翰和Grolemund的一審出色的的R用數據科學介紹這些基本操作:http://r4ds.had.co.nz/

您可以使用dplyr和magrittr包做在一個易於以下遵循的方式:

# Install the tidyverse 
library(tidyverse) 

# Create data 
place = rep(c('AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI'), times=4) 
measure = rep(c('meas1','meas2','meas3','meas4'), each=11) 
set.seed(200) 
rating = sample(c('good','bad'), size = 44, prob=c(2,1), replace=T) 
df = data.frame(place, measure, rating) 

# Do some analysis 
df %>% 
    group_by(place) %>% 
    summarise(mean_score = mean(rating == "good"), n = n()) %>% 
    arrange(desc(mean_score)) 

在這裏,我們餐廳的名字「按組」,「然後」,「總結」了它收到「好」評級的平均數每個分組(創建一個新的變量),然後用這個'mean_sco'按降序「排列」輸出回覆'。

我們還在彙總功能中創建了新的'n'變量,它計算每個均值所基於的評級數量(例如,如果我們看到一家餐廳只有2個評級,我們會知道平均值可能會不具有代表性:請參閱http://www.evanmiller.org/how-not-to-sort-by-average-rating.html以獲得全面的示例)。

+1

這是一個很好的答案,但我不確定你的第一個鏈接的合法性。 –

+0

你是什麼意思的鏈接的合法性?這是一個非商業性的,在Creative Commons Attribution-NonCommercial-NoDerivs 3.0 – prestono

+0

上授權的開源資源的名稱引用。很抱歉,您是對的,沒關係。該網站沒有爲我加載,我檢查並看到這本書在商店出售,所以我認爲這是一個盜版的副本。 –

相關問題