R中如何拆分字符并计算对应的频率
How to split characters and calculate the corresponding frequency in R
这是我的数据:
[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"
的频率
有没有办法做到这一点?
可能不是最好或更优雅的方法,但一个可能的解决方案是 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
它是否回答了您的问题?
在 base R 中,您可以 unlist
列,删除 NA
值,用逗号分隔它们并使用 table
计算频率。
table(unlist(strsplit(na.omit(unlist(as.character(da$name))), ",")))
这是我的数据:
[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"
的频率有没有办法做到这一点?
可能不是最好或更优雅的方法,但一个可能的解决方案是 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
它是否回答了您的问题?
在 base R 中,您可以 unlist
列,删除 NA
值,用逗号分隔它们并使用 table
计算频率。
table(unlist(strsplit(na.omit(unlist(as.character(da$name))), ",")))