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