2016-03-15 77 views
0

我試圖簡化這與幾個語句。不知道如何去做(或者如果我可以),但任何能夠讓我接近或儘可能少的步驟的人。我正在使用dplyr和lubridate。我有一個名爲OutofRange(sample)的數據庫;dplyr group_by邏輯值

OutOfRange %>% select(OutRange, TouchVPOC) 
Source: local data frame [341 x 2] 

    OutRange TouchVPOC 

    (lgl)  (lgl) 

1  FALSE  TRUE 
2  FALSE  FALSE 
3  FALSE  TRUE 
4  FALSE  FALSE 
5  FALSE  TRUE 

OutOfRange %>% select(OutRange, TouchVPOC) %>% filter(OutRange == T) %>% tally 
Source: local data frame [1 x 1] 

     n (int) 
1 37 

OutOfRange %>% select(OutRange, TouchVPOC) %>% filter(OutRange == T, TouchVPOC == T) %>% tally 
Source: local data frame [1 x 1] 

     n (int) 
1 15 

15/37 
[1] 0.4054054 

因此,如果可能的話,我正在尋找類似這樣的最終結果,其中CountofDataFrame是所有行的計數; OutRange & TouchVPOC是TRUE值的計數;和Pct = TouchVPOC/OutRange。

CountOfDataFrame OutRange TouchVPOC Pct 
      341  37   15 .40 

我明白了,我可能會問很多..我是新來的,歡迎任何建議。只是尋找一個基礎或開始在正確的方向。

+2

請閱讀關於[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給出[可重現的例子](http:// stackoverflow.com/questions/5963269)。這會讓其他人更容易幫助你。 – zx8754

+0

一些相關的*聚合*帖子:[R分組功能:sapply vs. lapply vs. apply。與tapply與通過與聚合](http://stackoverflow.com/questions/3505701),[同時聚合多個變量](http://stackoverflow.com/questions/9723208),[如何總結一個變量按照羣組?](http://stackoverflow.com/q/1660124) – zx8754

+0

爲了給你一個想法,試試'sum(c(TRUE,FALSE,TRUE))'。 – zx8754

回答

0

我建議你先把數據先整理成整齊的格式,然後用group_by/summarize/mutate做下面的聚合和百分比計算。

a <- data.frame(OutRange = c(TRUE, FALSE, FALSE, FALSE, FALSE), 
      TouchVPOC = c(TRUE, TRUE, TRUE, FALSE, FALSE)) 

> a 
    OutRange TouchVPOC 
1  TRUE  TRUE 
2 FALSE  TRUE 
3 FALSE  TRUE 
4 FALSE  FALSE 
5 FALSE  FALSE 

library(tidyr) 
a %>% 
    gather(type, value, OutRange:TouchVPOC) %>% 
    group_by(type) %>% 
    summarize(true_count = sum(value)) %>% 
    mutate(total = sum(true_count), Pct = true_count/total) 

Source: local data frame [2 x 4] 

     type true_count total Pct 
     (chr)  (int) (int) (dbl) 
1 OutRange   1  4 0.25 
2 TouchVPOC   3  4 0.75 
+0

謝謝!沒有意識到tidyr以這種方式工作。爲我打開新的大門。運行這個之後,我意識到我需要在過濾數據的前一步。但是在變更原始數據的時候,我能夠在表格中添加列。換句話說,我不是過濾,而是突變了一個名爲OutRange_Touch的新列;其中有竅門! – marts01