组合列以保持唯一性

时间:2017-07-10 12:25:20

标签: r

我需要将多个列组合在一起,以获得Paste multiple columns together线程中的单个“分组”变量。问题是,我希望它对字符串的类似内容具有鲁棒性,例如

tmp1 <- data.frame(V1 = c("a", "aa", "a",  "b", "bb", "aa"),
                   V2 = c("a", "a",  "aa", "b", "b",  "a"))

tmp2 <- data.frame(V1 = c("+",  "++", "+-", "-|",  "||"),
                   V2 = c("-|", "--", "++", "|-+", "|"))

对于上述数据,使用函数apply(x, 1, paste, collapse = sep)""|-+之类的常见分隔符会失败,因为它会使在输出中无法识别的列可能会导致将不同类型的列混合在一起。

可以假定列具有不同的类型(数字,因子,字符等)。

预期输出是每行一个ID的向量,其中每个ID分配给两列之间唯一的值组合。身份证的实际形式对我来说并不重要。例如,

1 2 3 4 5 2

表示tmp1数据。

你能建议一个更好的方法吗?请注意我关注的是表现。

1 个答案:

答案 0 :(得分:1)

根据您问题的更新,如果ID无关紧要,这很容易。以下是使用data.table的方法,您可以使用dplyr执行类似操作。

library(data.table)

merge(tmp1,
      unique(tmp1)[, .(V1, V2, ID = 1:.N)],
      by = c("V1", "V2"))

   V1 V2 ID
1:  a  a  1
2:  a aa  3
3: aa  a  2
4: aa  a  2
5:  b  b  4
6: bb  b  5

合并的第二个参数仅设置唯一组合,并为每个唯一行分配唯一值,然后合并将其返回到完整数据集。