【问题标题】:How to split characters and calculate the corresponding frequency in R如何在R中拆分字符并计算相应的频率
【发布时间】:2020-04-04 01:05:27
【问题描述】:

这是我的数据:

 [1] NA                                              NA                                             
 [3] NA                                              "EP, IP, RA, SH"
 [5] "EO, EP"                                        NA 

我使用以下方法拆分数据:

da$name<-str_split(da$name,",")

数据变成:

[[1]]
[1] NA

[[2]]
[1] NA

[[3]]
[1] NA

[[4]]
[1] "EP"  " IP" " RA"  " SH"

[[5]]
[1] "EO" " EP"         

[[6]]
[1] NA

我想计算NA,"EP","IP","RA","SH"和"EO"的频率

有没有办法做到这一点?

【问题讨论】:

    标签: r split character frequency-analysis


    【解决方案1】:

    可能不是最好或更优雅的方法,但可能的解决方案是 unlist 你的 strsplit 结果,以便使其成为所有单个值的向量,然后计算每个不同的值:

    df <- data.frame(Vec = c(NA,NA,NA,"EP, IP, RA, SH","EO, EP",NA))
    
    vec <- unlist(strsplit(as.character(df$Vec),","))
    
    library(dplyr)
    as.data.frame(vec) %>% count(vec)
    
    # A tibble: 7 x 2
      vec       n
      <fct> <int>
    1 " EP"     1
    2 " IP"     1
    3 " RA"     1
    4 " SH"     1
    5 "EO"      1
    6 "EP"      1
    7  NA       4
    

    它回答了你的问题吗?

    【讨论】:

    • 如果我有一个代表“年份”的列,例如,我想计算不同年份下不同 vec 的频率。 df &lt;- data.frame(Vec = c(NA,NA,NA,"EP, IP, RA, SH","EO,EP",NA),year=c(2015,2016,2017,2017,2016,2016)),但是当我将其拆分为向量时,(Vec)的行数与“年”不同
    【解决方案2】:

    在基数 R 中,您可以 unlist 列,删除 NA 值,用逗号分隔它们并使用 table 计算频率。

    table(unlist(strsplit(na.omit(unlist(as.character(da$name))), ",")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-30
      • 2016-10-30
      • 2018-09-25
      • 2017-05-12
      • 2015-12-13
      • 2011-10-06
      • 1970-01-01
      相关资源
      最近更新 更多