R子集向量作为字符串处理

时间:2016-12-14 11:25:36

标签: r string vector subset

我有一个大型数据框,我将我的矢量强制转换为字符串(使用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的子集,但我想检查。

2 个答案:

答案 0 :(得分:1)

foo

答案 1 :(得分:1)

我认为不使用lapplytoString组合可能会更好,但会将列表存储在数据框中。为此,我发现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)