【发布时间】:2017-04-29 17:05:27
【问题描述】:
我有一个大型数据框,我已将向量强制转换为字符串(使用 lapply 和 toString),以便它们适合数据框,现在我无法检查一列是否是另一列的子集。有没有一种简单的方法可以做到这一点。
X <- data.frame(y=c("ABC","A"), z=c("ABC","A,B,C"))
X
y z
1 ABC ABC
2 A A,B,C
all(X$y %in% X$z)
[1] FALSE
(X$y[1] %in% X$z[1])
[1] TRUE
(X$y[2] %in% X$z[2])
[1] FALSE
我需要再次将每个 y 和 z 字符串值视为一个向量(逗号分隔),然后检查 y 是否是 z 的子集。
在上述情况下,A 是 A,B,C 的子集。但是,因为我将两者都视为字符串,所以它不起作用。
在上面,y 只是一个值,z 是 1 和 3。我要测试的数据帧样本是 10,000 行,y 每行有 1-5 个值,z 每行有 1-100 个值。看起来 1-5 始终是 z 的子集,但我想检查一下。
【问题讨论】:
-
尝试使用
apply(X, 1, function(x) x[1] %in% unlist(strsplit(x[2], ","))) -
你每行只有一个字符串不清楚你想要什么
as.character(X[,1])==as.character(X[,2])或者可能是mapply(grepl, X$y, X$z) -
试试
grepl(X$y[2], X$z[2])或mapply(grepl, X$y, X$z) -
实际上你需要定义你是否想要完美的子集。例如如果
X$y[2] == "A,B,D",那么您期望的输出是什么? -
@Sotos 可能添加 fixed=TRUE 会起作用(我怀疑“++”会导致错误),但没有真实数据,无法确定。