dplyr group_by逻辑值

时间:2016-03-15 07:10:27

标签: r dplyr

我试图通过一些陈述来简化这一点。不确定如何去做(或者如果可以的话),但任何可以让我接近或尽可能少的步骤的人。我正在使用dplyr和lubridate。我有一个名为OutofRange(sample)的数据库;

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

我确实知道,我可能会问很多......我是新手,欢迎提出任何建议。只是寻找正确方向的基础或开端。

1 个答案:

答案 0 :(得分: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
相关问题