r - 统计出现次数,字符串顺序只统计1x

标签 r match

使用更准确的数据集示例修改了问题

我有几个不同的列表,每个列表都包含许多字符。我在这里写了一个非常简短的例子

List1 <- "A + B + C + D + E:F + F:E"

List2<- "A + B + C + E:F + F:E + G:H + H:G"

List3 <- "J + K + L + L:H + L:H1"

我试图通过所有这些列表查找出现的频率,但某些项目的重复导致了问题。

通过大量循环,以及 X %in% Y、strsplit(在“:”之前和之后拆分),我得到了这个

 sig_var8
     var count
 1     0     0
 2     A     2
 3     B     2
 4     C     2
 5     D     1
 6   E:F     2
 7   F:E     2
 8   G:H     1
 9   H:G     1
 10    J     1
 11    K     1
 12    L     1
 13  L:H     1
 14 L:H1     1

我想要的是这样的:

sig_var8
     var count
 1     0     0
 2     A     2
 3     B     2
 4     C     2
 5     D     1
 6   E:F     2
 7   G:H     1
 8     J     1
 9     K     1
 10    L     1
 11  L:H     1
 12 L:H1     1

注意:在列表1中,E:F和F:E被认为是相同的并且只出现一次。与列表 2 相同,其中 G:H == H:G,并且只计数一次。请注意,grep 不是最好的,因为列表 3 中的 L:H 和 L:H1 不同,它们需要单独计数(因此有 %in%)。

这是我编写的代码:

sig_var8<-data.frame(matrix(data=0,nrow=1,ncol=2))
colnames(sig_var8)<-c("var","count")
sig_var8[,1]<-as.character(sig_var8[,1])
sig_var8[,2]<-as.numeric(sig_var8[,2])


for(list in 1:3){
  temp_list<-get(paste0("List",list)) #get the equation above
  assign(paste0("List",list,"a"), gsub(" ","",temp_list)) #remove all spaces in the sentence
  assign(paste0("List",list,"a_split"), strsplit(get(paste0("List",list,"a")),"[+]")) #split where "+" are
  temp_listA<-get(paste0("List",list,"a_split"))[[1]]
  for (item in 1:length(temp_listA)){
    if(isTRUE(temp_listA[item] %in% sig_var8[,1])){
      row_n<-which(sig_var8[,1]==temp_listA[item])
      sig_var8[row_n,2]<-sig_var8[row_n,2]+1
     }
     if(isFALSE(temp_listA[item] %in% sig_var8[,1])){
       row_n<-nrow(sig_var8)
       sig_var8[row_n+1,1]<-temp_listA[item]
       sig_var8[row_n+1,2]<-1
    }
  }
 }

最佳答案

也许像下面这样的东西可以满足您的需求。

Lst <- mget(ls(pattern = "^List"))

Lst <- lapply(Lst, function(x) {
  L <- strsplit(x, ":")
  res <- sapply(L, function(y){
    paste(sort(y), collapse = ":")
  })
  unique(res)
})

table(unlist(Lst))
#
#   A    B    C    D  E:F  G:H  H:L H1:L    J    K    L 
#   2    2    2    1    2    1    1    1    1    1    1 

关于r - 统计出现次数,字符串顺序只统计1x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733188/

相关文章:

r - 在 R 中将列转为行标题?

r - 具有多个项目的交叉表

r - 在 ggplot2 中自定义 "scale_color_gradient2"

r - 有没有办法自动为 R Markdown 中的图像添加标识符?

javascript - 用于识别 guid 或数字的正则表达式

regex - 在 Javascript 中匹配 IE7 和 IE8 中的不可破坏空格

R spplot() 如何更改比例尺的单位类型

java - 使用正则表达式java匹配数字和字母/数字(按分隔)

linux - 文件名匹配,区分数字和字符

r - R中列表中的向量与多个向量之间的匹配