我有一个大型数据框,我将我的矢量强制转换为字符串(使用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.数据帧样本I测试是10,000行,y每行有1-5个值,每行z 1-100 。看起来1-5总是z的子集,但我想检查。
答案 0 :(得分:1)
foo
答案 1 :(得分:1)
我认为不使用lapply
和toString
组合可能会更好,但会将列表存储在数据框中。为此,我发现tbl_df
(在tibble
包中找到)更加友好,虽然我相信data.table
对象也可以这样做(如果我和#39;我错了)
library(tibble)
y_char <- list("ABC", "A")
z_char <- list("ABC", c("A", "B", "C"))
X <- data_frame(y = y_char,
z = z_char)
请注意,现在打印X
时,tibble
每行中的条目都是列表中的条目。现在我们可以使用mapply
进行成对比较。
# All y in z
mapply(function(x, y) all(x %in% y),
X$y,
X$z)
# All z in y
mapply(function(x, y) all(y %in% x),
X$y,
X$z)