R 提取两个字符串之间不同的不同字符
我有两个字符串,R 提取两个字符串之间不同的不同字符,r,string,R,String,我有两个字符串,a我们可以用来从a中依次删除b中的每个字符: a <- 'AERRRTX'; b <- 'TRRA'; paste(collapse='',Reduce(function(as,bc) as[-match(bc,as,nomatch=length(as)+1L)],strsplit(b,'')[[1L]],strsplit(a,'')[[1L]])); ## [1] "ERX" 您可以使用vecsets包中的函数vsetdiff install.packages(“
a我们可以用来从a
中依次删除b
中的每个字符:
a <- 'AERRRTX'; b <- 'TRRA';
paste(collapse='',Reduce(function(as,bc) as[-match(bc,as,nomatch=length(as)+1L)],strsplit(b,'')[[1L]],strsplit(a,'')[[1L]]));
## [1] "ERX"
您可以使用vecsets包中的函数vsetdiff
install.packages(“向量集”)
图书馆(vecsets)
a使用data.table
package`:
library(data.table)
x = data.table(table(strsplit(a, '')[[1]]))
y = data.table(table(strsplit(b, '')[[1]]))
dt = y[x, on='V1'][,N:=ifelse(is.na(N),0,N)][N!=i.N,res:=i.N-N][res>0]
rep(dt$V1, dt$res)
#[1] "E" "R" "X"
使用pmatch
的不同方法
a1 <- unlist(strsplit(a, ""))
b1 <- unlist(strsplit(b, ""))
a1[!1:length(a1) %in% pmatch(b1, a1)]
#[1] "E" "R" "X"
a1小点:建议避免指定c
,因为它是一个常用的内置函数。如果c
是在任何封闭环境中定义的变量,那么对该标识符的引用可以绑定到它,这可能会弄乱许多代码。例如,do.call(c,…)
在这种情况下失败。很好的选择。您可以将第三行替换为a1[-pmatch(b1,a1)]
。另外,注意pmatch
的“duplicates.ok=FALSE”参数也很有用,它将其行为区分为match
library(data.table)
x = data.table(table(strsplit(a, '')[[1]]))
y = data.table(table(strsplit(b, '')[[1]]))
dt = y[x, on='V1'][,N:=ifelse(is.na(N),0,N)][N!=i.N,res:=i.N-N][res>0]
rep(dt$V1, dt$res)
#[1] "E" "R" "X"
a1 <- unlist(strsplit(a, ""))
b1 <- unlist(strsplit(b, ""))
a1[!1:length(a1) %in% pmatch(b1, a1)]
#[1] "E" "R" "X"
a <- "Ronak";b<-"Shah"
a1 <- unlist(strsplit(a, ""))
b1 <- unlist(strsplit(b, ""))
a1[!1:length(a1) %in% pmatch(b1, a1)]
# [1] "R" "o" "n" "k"