R 对多个向量调用setdiff()
如何在R中使用setdiff()来获取一个向量中的元素,而不是其他向量中的元素我的示例如下:R 对多个向量调用setdiff(),r,R,如何在R中使用setdiff()来获取一个向量中的元素,而不是其他向量中的元素我的示例如下: dat1 <- c("osa", "bli", "usd", "mnl") dat2 <- c("mnu", "erd", "usd", "mnl") dat3 <- c("ssu", "erd", "usd", "mnl") dat1试试这个: all.dat <- list(dat1, dat2, dat3) from.dat <- rep(seq_alon
dat1 <- c("osa", "bli", "usd", "mnl")
dat2 <- c("mnu", "erd", "usd", "mnl")
dat3 <- c("ssu", "erd", "usd", "mnl")
dat1试试这个:
all.dat <- list(dat1, dat2, dat3)
from.dat <- rep(seq_along(all.dat), sapply(all.dat, length))
in.dat <- split(from.dat, unlist(all.dat))
in.one.dat <- in.dat[sapply(in.dat, length) == 1]
in.one.dat
# $bli
# [1] 1
# $mnu
# [1] 2
# $osa
# [1] 1
# $ssu
# [1] 3
all.dat第二种可能性:
f <- function (...)
{
aux <- list(...)
ind <- rep(1:length(aux), sapply(aux, length))
x <- unlist(aux)
boo <- !(duplicated(x) | duplicated(x, fromLast = T))
split(x[boo], ind[boo])
}
f(dat1, dat2, dat3)
$`1`
[1] "osa" "bli"
$`2`
[1] "mnu"
$`3`
[1] "ssu"
f另一种使用setdiff
的解决方案:
myl <- list(A = dat1,
B = dat2,
C = dat3)
lapply(1:length(myl), function(n) setdiff(myl[[n]], unlist(myl[-n])))
[[1]]
[1] "osa" "bli"
[[2]]
[1] "mnu"
[[3]]
[1] "ssu"
myl感谢所有优雅的解决方案。他们都做得很好。非常感谢!有没有办法将列表输出转换为数据帧?
myl <- list(A = dat1,
B = dat2,
C = dat3)
lapply(1:length(myl), function(n) setdiff(myl[[n]], unlist(myl[-n])))
[[1]]
[1] "osa" "bli"
[[2]]
[1] "mnu"
[[3]]
[1] "ssu"