summarizing counts of a factor with dplyr

前端 未结 3 1328
天涯浪人
天涯浪人 2020-12-24 13:38

I want to group a data frame by a column (owner) and output a new data frame that has counts of each type of a factor at each observation. The real data frame is fairly larg

相关标签:
3条回答
  • 2020-12-24 14:10

    If you wanted to forego the dplyr, you can split into lists.

    df <- split(df, list(df[[obs1]], df[[obs2]])
    

    If you wanted the count, you just create an sapply or lapply call to run through the lists and get the count of each one. Or literally any other function you want.

    0 讨论(0)
  • 2020-12-24 14:18

    You could use tidyr with dplyr

    library(dplyr)
    library(tidyr)
    
     df %>%
     gather(observation, Val, obs1:obs2) %>% 
     group_by(owner,observation, Val) %>% 
     summarise(n= n()) %>%
     ungroup() %>%
     spread(Val, n, fill=0)
    

    which gives the output

      #    owner observation loud quiet
      #1     0        obs1    1     1
      #2     0        obs2    2     0
      #3     1        obs1    1     1
      #4     1        obs2    0     2
    
    0 讨论(0)
  • 2020-12-24 14:23

    In 2017 the answer is

    library(dplyr)
    library(tidyr)
    
    gather(df, key, value, -owner) %>%
      group_by(owner, key, value) %>%
      tally %>% 
      spread(value, n, fill = 0)
    

    Which gives output

    Source: local data frame [4 x 4]
    Groups: owner, key [4]
    
      owner   key  loud quiet
    * <dbl> <chr> <dbl> <dbl>
    1     0  obs1     1     1
    2     0  obs2     2     0
    3     1  obs1     1     1
    4     1  obs2     0     2
    

    In 2019 the answer is:

    gather(df, key, value, -owner) %>% 
        count(owner, key, value) %>% 
        spread(value, n, fill = 0)
    
    0 讨论(0)
提交回复
热议问题