Frequency of values per column in table

前端 未结 4 1033
傲寒
傲寒 2020-12-21 07:59

What is a good way to get the independent frequency counts of multiple columns using dplyr? I want to go from a table of values:

# A tibble: 7          


        
相关标签:
4条回答
  • 2020-12-21 08:18

    For the same data set that you provided in the question this would be another solution (base-R):

    myfreq <- sapply(df, function(x) table(factor(x, levels=unique(unlist(df)), ordered=TRUE)))
    

    Output would be:

    > myfreq
    
    #   a b c d 
    # 1 2 0 2 1 
    # 2 1 4 2 0 
    # 3 2 2 0 6 
    # 5 2 0 1 0 
    # 4 0 1 2 0
    
    0 讨论(0)
  • 2020-12-21 08:26
    library(tidyverse)
    
    dt <- data.frame(a = c(1L, 1L, 2L, 3L, 3L, 5L, 5L), b = c(2L, 2L, 2L, 2L, 3L, 3L, 4L),
                     c = c(1L, 1L, 5L, 4L, 2L, 4L, 2L), d = c(3L, 3L, 3L, 3L, 3L, 3L, 1L))
    
    dt2 <- dt %>%
      mutate(ID = 1:n()) %>%
      gather(Group, x, -ID) %>%
      select(-ID) %>%
      mutate(Group = paste(Group, "n", sep = "_")) %>%
      count(Group, x) %>%
      spread(Group, n, fill = 0L)
    
    0 讨论(0)
  • 2020-12-21 08:38

    Using tabulate in base R:

    apply(df,2,function(x) tabulate(x)[min(df):max(df)])
    
    #     a  b c  d
    #[1,] 2  0 2  1
    #[2,] 1  4 2  0
    #[3,] 2  2 0  6
    #[4,] 0  1 2 NA
    #[5,] 2 NA 1 NA
    
    0 讨论(0)
  • 2020-12-21 08:41
    library(dplyr)
    library(reshape2)
    df %>%
      melt() %>%
      dcast(value ~ variable, fun.aggregate=length)
    
    #   value a b c d
    # 1     1 2 0 2 1
    # 2     2 1 4 2 0
    # 3     3 2 2 0 6
    # 4     4 0 1 2 0
    # 5     5 2 0 1 0
    

    Data

    df <- structure(list(a = c(1L, 1L, 2L, 3L, 3L, 5L, 5L), b = c(2L, 2L, 
    2L, 2L, 3L, 3L, 4L), c = c(1L, 1L, 5L, 4L, 2L, 4L, 2L), d = c(3L, 
    3L, 3L, 3L, 3L, 3L, 1L)), .Names = c("a", "b", "c", "d"), class = "data.frame", row.names = c("1", 
    "2", "3", "4", "5", "6", "7"))
    
    0 讨论(0)
提交回复
热议问题