代码之家  ›  专栏  ›  技术社区  ›  RoyBatty

统计每个字符在整个数据集中出现的次数

  •  0
  • RoyBatty  · 技术社区  · 2 年前

    我有一张有二十列数千行的表格。

    仅出于示例目的,我将说我有这个表:

    ColumnA   ColumnB
    Testing      This
    1231         1231
    

    我想计算每个字符在整个数据集中出现的次数。

    所以在我们的玩具示例中,我们将

    character   nºoftimes
    T                3
    e                1
    s                2
    i                2
    n                1
    g                1
    h                1
    1                4
    2                2
    3                2
    

    我曾想过使用某种字符串操作,但现在我知道该怎么做了。

    2 回复  |  直到 2 年前
        1
  •  3
  •   Robert Hacken    2 年前

    你可以使用 strsplit table :

    df <- data.frame(ColumnA=c('Testing', '1231'),
                     ColumnB=c('This', '1231'))
    
    table(tolower(unlist(sapply(df, strsplit, ''))))
    # 1 2 3 e g h i n s t 
    # 4 2 2 1 1 1 2 1 2 3 
    

    这并没有区分小写和大写字母,所有字母都改为小写。如果您想进行区分,请删除 tolower() 作用

        2
  •  1
  •   Karthik S    2 年前

    这是否有效:

    data.frame(table(strsplit(toupper(paste0(apply(df, 2, paste0, collapse = ''), collapse = '')), split = '')))
       Var1 Freq
    1     1    4
    2     2    2
    3     3    2
    4     E    1
    5     G    1
    6     H    1
    7     I    2
    8     N    1
    9     S    2
    10    T    3
    
        3
  •  1
  •   Ronak Shah    2 年前

    这几乎与其他两个答案相似(由Karthik和Robert提出),但

    1. 这不使用apply函数族和
    2. 使用管道以提高可读性。

    基准R-

    df |> 
      as.matrix() |>
      strsplit('') |>
      unlist() |>
      tolower() |>
      table() |>
      stack() |>
      (\(d) setNames(d[2:1], c('character', 'count')))()
    
    #   character count
    #1          1     4
    #2          2     2
    #3          3     2
    #4          e     1
    #5          g     1
    #6          h     1
    #7          i     2
    #8          n     1
    #9          s     2
    #10         t     3
    

    自从你标记 tidyverse 同样的答案用 潮韵诗 功能。

    library(tidyverse)
    
    df %>%
      as.matrix() %>%
      str_split('') %>%
      flatten_chr() %>%
      tolower() %>%
      table() %>%
      enframe(name = "character", value = "count") %>%
      mutate(count = as.numeric(count))
    
        4
  •  0
  •   Chris Ruehlemann    2 年前

    library(tidyverse)
    df %>%
      pivot_longer(everything()) %>%
      separate_rows(value, sep = "(?<!^)(?!$)") %>%
      group_by(char = tolower(value)) %>%
      summarise(N = n())
    # A tibble: 10 × 2
       char      N
       <chr> <int>
     1 1         4
     2 2         2
     3 3         2
     4 e         1
     5 g         1
     6 h         1
     7 i         2
     8 n         1
     9 s         2
    10 t         3
    
        5
  •  0
  •   Maël    2 年前

    你可以使用 tidytext :

    library(tidytext)
    library(tidyr)
    library(dplyr)
    
    df %>%
      pivot_longer(everything()) %>% 
      unnest_tokens(value, value, token = "characters") %>% 
      count(value)
    

    输出

    # A tibble: 10 × 2
       value     n
       <chr> <int>
     1 1         4
     2 2         2
     3 3         2
     4 e         1
     5 g         1
     6 h         1
     7 i         2
     8 n         1
     9 s         2
    10 t         3