2016-03-29 40 views
2

此代碼:Dplyr:計數與條件行每

Group <- rep(c("A", "B", "C"), each = 3) 
Days <- c(21,21,19,18,21,21,11,21,19) 
State <- c("OK", "NOK", "OK", "OK", "NOK", "OK", "OK", "OK", "NOK") 

data <- data.frame(Group = Group, Days = Days, State = State) 

創建該數據幀。

> data 
    Group Days State 
1  A 21 OK 
2  A 21 NOK 
3  A 19 OK 
4  B 18 OK 
5  B 21 OK 
6  B 21 OK 
7  C 11 NOK 
8  C 21 OK 
9  C 19 NOK 

我經常使用group_bydplyrsummarizes做得到組的參數(如A ,B,C)。但我無法想象一個簡單的方法來獲得每組OK和NOK的數量(例如NOK百分比)。我期望得到的結果如下:

> result 
     Group %NOK 
    1  A 33.3 
    2  B  0 
    3  C 66.6 

在下一步我希望通過附加的計算來計算比例。例如:計算NOK的數量,每個組的天數> 20。我真的很簡單的解決辦法是:

data %>% group_by(Group) %>% nrow(filter(Days < 20, State == "NOK"))/n() * 100 

,但是這將是很好,如果你可以給我一個解決方案,那就是實際工作;)

回答

4

我們可以使用summarise

data %>% 
    group_by(Group) %>% 
    summarise(NOKPer = round(100*sum(State=="NOK")/n(),2)) 
#  Group NOKPer 
# (chr) (dbl) 
# 1  A 33.33 
# 2  B 0.00 
# 3  C 66.67 

對於第二種情況

data %>% 
    group_by(Group) %>% 
    summarise(NOKPer = round(100*sum(State=="NOK" & Days >20)/n(), 2)) 

這可以很容易地使用base R

prop.table(table(data[-2]),1) 

和第二條件

prop.table(table(subset(data, Days>20, select=c("Group", "State"))),1) 
+1

運行完美解決了,感謝您的快速回答 – WitheShadow