首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取匹配字符串和非匹配字符串的部分

提取匹配字符串和非匹配字符串的部分
EN

Stack Overflow用户
提问于 2018-04-09 16:23:23
回答 2查看 196关注 0票数 1

我需要提取字符串中匹配的部分和两列之间不匹配的部分:

代码语言:javascript
复制
x <- c("apple, banana, pine nuts, almond")
y <- c("orange, apple, almond, grapes, carrots")
j <- data.frame(x,y)

得到:

代码语言:javascript
复制
yonly <- c("orange, grapes, carrots")
xonly <- c("banana, pine nuts")
both <- c("apple, almond")
k <- data.frame(cbind(x,y,both,yonly,xonly))

我研究了str_detect,intersect等,但这些似乎需要对现有细胞进行重大手术,将它们分离成不同的细胞。这是一个与其他列相当大的数据集,所以我不想过多地操作它。你能帮我想出一个更简单的解决方案吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-09 16:29:24

您可以使用setdiffintersect

代码语言:javascript
复制
> j <- data.frame(x,y, stringsAsFactors = FALSE)
> X <- strsplit(j$x, ",\\s*")[[1]]
> Y <- strsplit(j$y, ",\\s*")[[1]]
> 
> #Yonly
> setdiff(Y, X)
[1] "orange"  "grapes"  "carrots"
> 
> #Xonly
> setdiff(X, Y)
[1] "banana"    "pine nuts"
> 
> #Both
> intersect(X, Y)
[1] "apple"  "almond"
票数 4
EN

Stack Overflow用户

发布于 2018-04-09 17:08:27

为了像您所描述的那样创建一个更长的dataframe j的额外列,您可以使用mapply与Jilber的答案中使用的方法。

代码语言:javascript
复制
#set up data
x <- c("apple, banana, pine nuts, almond")
y <- c("orange, apple, almond, grapes, carrots")
j <- data.frame(x,y,stringsAsFactors = FALSE)

j[,c("yonly","xonly","both")] <- mapply(function(x,y) {
                    x2 <- unlist(strsplit(x, ",\\s*"))
                    y2 <- unlist(strsplit(y, ",\\s*"))
                    yonly <- paste(setdiff(y2, x2), collapse=", ")
                    xonly <- paste(setdiff(x2, y2), collapse=", ")
                    both <- paste(intersect(x2, y2), collapse=", ")
                    return(c(yonly, xonly, both))      },
                                        j$x,j$y)

j
                                 x                                      y                   yonly             xonly          both
1 apple, banana, pine nuts, almond orange, apple, almond, grapes, carrots orange, grapes, carrots banana, pine nuts apple, almond
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49737447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档