Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取逗号分隔字符串的到列之间的公共元素(来自同一行),保留行名_R - Fatal编程技术网

R 获取逗号分隔字符串的到列之间的公共元素(来自同一行),保留行名

R 获取逗号分隔字符串的到列之间的公共元素(来自同一行),保留行名,r,R,我有一个数据框,其中某列包含逗号分隔的字符串: colA colB 1 a,b,c,ñ d,b,e 2 f,g,h f,g,m,p 3 i,j,k f,o,j 我想在对应于同一行的两列之间获得公共元素。因此,我期望的输出是: colA colB 1 b b 2 f,g f,g 3 j j 我试图将这些列转换为列表列表,以便在之后执行交集,但我遇到了一些问题,因此我想知道

我有一个数据框,其中某列包含逗号分隔的字符串:

     colA     colB

1    a,b,c,ñ  d,b,e
2    f,g,h    f,g,m,p
3    i,j,k    f,o,j

我想在对应于同一行的两列之间获得公共元素。因此,我期望的输出是:

    colA    colB
1     b       b
2    f,g     f,g
3     j       j

我试图将这些列转换为列表列表,以便在之后执行交集,但我遇到了一些问题,因此我想知道是否有更简单的方法。我怎样才能得到这个呢?

我们可以用这个

 df[,1:2] <- apply(df,1, function(X) paste(unlist(strsplit(X[1],","))[unlist(strsplit(X[1],",")) %in% unlist(strsplit(X[2],","))],collapse=",") )


   > df
  colA colB
1    b    b
2  f,g  f,g
3    j    j
df[,1:2]df
可乐瓶
1 b b
2f,gf,g
3 j j

数据:


df如果要处理较大的数据集,可以从“splitstackshape”中尝试
cSplit\u l

库(splitstackshape)

temp另一个选项是
str\u extract

library(stringr)
library(dplyr)
library(purrr)
df %>% 
   transmute(colA = map_chr(str_extract_all(colA, 
              str_replace_all(colB, ",", "|")), toString), 
          colB = colA)
#   colA colB
#1    b    b
#2 f, g f, g
#3    j    j

是否确实要替换列?如果“colA”和“colB”的结果相同,你真的需要在两列中存储它们的交集吗?是的,实际上我不介意保留两列还是一列。也许其中一个会更有效率
library(splitstackshape)
temp <- cSplit_l(df, names(df), ",", stripWhite = TRUE, type.convert = FALSE, drop = TRUE)
temp[, 1:2] <- vapply(Map(intersect, temp[[1]], temp[[2]]), toString, character(1L))
setnames(temp, names(df))[]
##    colA colB
## 1:    b    b
## 2: f, g f, g
## 3:    j    j
library(stringr)
library(dplyr)
library(purrr)
df %>% 
   transmute(colA = map_chr(str_extract_all(colA, 
              str_replace_all(colB, ",", "|")), toString), 
          colB = colA)
#   colA colB
#1    b    b
#2 f, g f, g
#3    j    j