【发布时间】:2015-06-04 18:53:48
【问题描述】:
我有两张表,table1 有一列字符串。我想在另一个表 table2 中找到每个字符串的匹配项,但在相应的 table2 列中,每个单元格包含每个行条目的列表。
到目前为止,我已经弄清楚了如何使用 grepl 来匹配特定条目:
grepl(table1$label[i],table2$labels[[j]][k])
对于某些 i、j 和 k。 i 和 j 是固定的,因为它们分别是表 1 和表 2 中的行数,但 k 是一些正值,所以我有这样的东西:
for (i in 1:nrow(table1)){
for (j in 1:nrow(table2){
for(k ?){
grepl(table1$label[i],table2$labels[[j]][k])
}
}
}
我不太确定要为 k 循环放什么。
一旦我确定了包含 table1 字符串的 table2 行,我想做的是报告来自不同 table2 列的相应值并将这些值附加到 table1 中的相应字符串行,所以我'我猜我需要更多的 for 循环...有没有任何快捷方式可以解决诸如此类的多个引用问题?
一些示例数据(注意 table2 列表中也有缺失值,但我假设在匹配这些时会被忽略,其他条目是字符类):
表 1
label
1 Tom
2 Gemma
3 Graham
表 2(更新)
item labels
1 Apple Tom, ,John, ,Terry,
2 Orange Bryan, ,Graham,
3 Pear Finn, ,Gemma, ,Graham,
输出
表 1
label item
1 Tom Apple
2 Gemma Pear
3 Graham Orange, Pear
从使用dput 我得到
Table1 <- structure(list(label = c("Tom", "Gemma", "Graham")), .Names = "label",
class = "data.frame", row.names = c(NA,
-3L))
Table2 <- structure(list(item = c("Apple", "Orange", "Pear"), labels = list(
structure(c("Tom", "", "John", "", "Terry", ""), .Dim = c(6L,
1L)), structure(c("Bryan", "", "Graham", ""), .Dim = c(4L,
1L)), structure(c("Finn", "", "Gemma", "", "Graham", ""), .Dim = c(6L,
1L)))), .Names = c("item", "labels"), row.names = c(NA, -3L
), class = "data.frame")
附录:关于我最初使用grepl,Table2中的一些标签与Table1中的标签只有部分匹配,但名称在Table1中是唯一的,所以我想申请匹配Table1标签,例如 Graham (Table1) 到 Graham (Table2) 和 Graham Green (Table2) 例如
表 2(版本 2)
item labels
1 Apple Tom, ,John, ,Terry,
2 Orange Bryan, ,Graham,
3 Pear Finn, ,Gemma, ,Graham Green,
输出 Table1 将是相同的。
【问题讨论】:
-
如果您想要有效的解决方案,请提供示例数据集和所需的输出。
-
对于包含列表的数据(如您的“表 2”),我们可能需要数据本身来了解其格式。考虑
dput或显示用于制作表格的代码。 -
谢谢@Frank,我没用过
dput,很有用!