【发布时间】:2014-06-16 18:19:45
【问题描述】:
我有一组字符串以及 ID:string 格式的相应 ID 作为 R 中的向量列表
d <- list( c("SD1:LUSH", "SD44:CANCEL", "SD384:FR563", "SD32:TRUMPET"), c("SD23:SWITCH", "SD1:LUSH", "SD567:TREK"), c("SD42:CRAYON", "SD345:FOX", "SD183:WIRE"), c("SD345:HOLE", "SD340:DUST", "SD387:ROLL"), c("SD455:TOMATO", "SD39:MATURE"), c("SD12:PAINTING", "SD315:MONEY31", "SD387:SPRING"), c("SD32:TRUMPET", "SD1:FIELD"))
[[1]]
[1] "SD1:LUSH" "SD44:CANCEL" "SD384:FR563" "SD32:TRUMPET"
[[2]]
[2] "SD23:SWITCH" "SD1:LUSH" "SD567:TREK"
[[3]]
[3] "SD42:CRAYON" "SD345:FOX" "SD183:WIRE"
[[4]]
[4] "SD345:HOLE" "SD340:DUST" "SD387:ROLL"
[[5]]
[5] "SD455:TOMATO" "SD39:MATURE"
[[6]]
[6] "SD12:PAINTING" "SD315:MONEY31" "SD387:SPRING"
[[7]]
[7] "SD32:TRUMPET" "SD1:FIELD"
我想通过它们的 ID 合并向量。需要合并具有公共 ID 的向量,同时保留其对应的字符串以形成新向量。可以在此类合并字符串中删除重复的 ID:字符串组合。总数据包含大约 2000 个这样的向量。样本数据的期望输出是
out <- c("SD1:LUSH, SD1:FIELD, SD23:SWITCH, SD32:TRUMPET, SD44:CANCEL, SD384:FR563, SD567:TREK", "SD12:PAINTING, SD42:CRAYON, SD183:WIRE, SD340:DUST SD345:FOX, SD345:HOLE, SD387:SPRING, SD387:ROLL", "SD455:TOMATO, SD39:MATURE")
[1] "SD1:LUSH, SD1:FIELD, SD23:SWITCH, SD32:TRUMPET, SD44:CANCEL, SD384:FR563, SD567:TREK"
[2] "SD12:PAINTING, SD42:CRAYON, SD183:WIRE, SD315:MONEY31, SD340:DUST SD345:FOX, SD345:HOLE, SD387:SPRING, SD387:ROLL"
[3] "SD455:TOMATO, SD39:MATURE"
我尝试将其转换为data.frame 以使用merge(),但发现它没有用。是否可以先使用字符串的 ID 部分然后搜索相应向量的并集来搜索交集。我曾尝试使用intersect() 和union(),但我未能仅使用向量的 ID 部分。
我对编写 R 脚本相当陌生。
更新 正如@CarlWitthoft 指出的那样,我正在尝试使与此图像合并的匹配条件更加清晰。
简而言之,我想根据 SDxyz:___ 合并它们之间有交集的向量,或者尝试获得重叠字符串向量的并集。
解决了!!
【问题讨论】:
-
您可以使用
lapply(d, strsplit, ":")拆分ID 部分-但是为什么SD1 和SD23 在out的第一个元素中,而SD12 在第二个元素中,从我的数据的任何属性都不清楚可以辨别。 -
向量 1、2 abd 7 应该合并在一起,因为它们之间有共同的 SD1。向量 3、4 和 6 应该合并,因为 SD345 在 3 和 4 之间是常见的,而 SD387 在 4 和 5 之间是常见的。
-
所以你想要
SDxyz中的数字定义的所有可能的合并?您的“所需输出”似乎与您对“匹配条件”的任何文本描述都不匹配 -
@CarlWitthoft 我想合并它们之间至少有一个共同 ID 元素的所有向量。向量 [1]、[2] 和 [7] 之间具有共同的 SD1:___。所以他们应该合并在一起。向量 [4] 具有与向量 [3] 相同的 SD345:___ 和与向量 [5] 相同的 SD387:___。所以向量 [4]、[3] 和 [5] 应该合并在一起。向量 [7] 没有任何与其他向量相同的元素,因此它应该保持原样。有时,同一个 ID 可能与多个字符串相关联,例如 SD1:LUSH 和 SD1:FIELD。
-
@CarlWitthoft 向量 [1]、[2] 和 [7] 之间有 SD1:___ 共同点。向量 [1] 和 [7] 也具有 SD1:___ 和 SD32___ 共同点。所以 [1]、[2] 和 [7] 应该合并在一起。