如何从 R 中的另一个向量中减去具有重复字符的完整字符向量
How to subtract a complete character vector with repeated characters from the other vector in R
我想从 x 中减去 y,这意味着从 x 中删除一个 "A"、三个 "B" 和一个 "E",所以 xNew
将是 c("A", "C", "A","B","D")
.这也意味着
length(xNew)=length(x) - length(y)
x <- c("A","A","C","A","B","B","B","B","D","E")
y <- c("A","B","B","B","E")
setdiff 不起作用,因为
xNew <- setdiff(x,y)
xNew
[1] "C" "D"
匹配也不行
xNew <- x[-match(y,x)]
xNew
[1] "A" "C" "A" "B" "B" "B" "D"
把第五位的"B"去掉了3次,所以还剩下三个"B"。
有谁知道如何做到这一点,R 中是否有可用的函数,或者我们应该编写一个私有函数?
非常感谢。
您可以使用函数 pmatch
:
x[-pmatch(y,x)]
#[1] "A" "C" "A" "B" "D"
编辑
如果您的数据可以是超过 1 个字符的字符串,这里有一个选项可以满足您的需求:
xNew <- unlist(sapply(x[!duplicated(x)],
function(item, tab1, tab2) {
rep(item,
tab1[item] - ifelse(item %in% names(tab2), tab2[item], 0))
}, tab1=table(x), tab2=table(y)))
例子
x <- c("AB","BA","C","CA","B","B","B","B","D","E")
y <- c("A","B","B","B","E")
xNew
# AB BA C CA B D
#"AB" "BA" "C" "CA" "B" "D"
我想从 x 中减去 y,这意味着从 x 中删除一个 "A"、三个 "B" 和一个 "E",所以 xNew
将是 c("A", "C", "A","B","D")
.这也意味着
length(xNew)=length(x) - length(y)
x <- c("A","A","C","A","B","B","B","B","D","E")
y <- c("A","B","B","B","E")
setdiff 不起作用,因为
xNew <- setdiff(x,y)
xNew
[1] "C" "D"
匹配也不行
xNew <- x[-match(y,x)]
xNew
[1] "A" "C" "A" "B" "B" "B" "D"
把第五位的"B"去掉了3次,所以还剩下三个"B"。
有谁知道如何做到这一点,R 中是否有可用的函数,或者我们应该编写一个私有函数? 非常感谢。
您可以使用函数 pmatch
:
x[-pmatch(y,x)]
#[1] "A" "C" "A" "B" "D"
编辑
如果您的数据可以是超过 1 个字符的字符串,这里有一个选项可以满足您的需求:
xNew <- unlist(sapply(x[!duplicated(x)],
function(item, tab1, tab2) {
rep(item,
tab1[item] - ifelse(item %in% names(tab2), tab2[item], 0))
}, tab1=table(x), tab2=table(y)))
例子
x <- c("AB","BA","C","CA","B","B","B","B","D","E")
y <- c("A","B","B","B","E")
xNew
# AB BA C CA B D
#"AB" "BA" "C" "CA" "B" "D"