gpt4 book ai didi

r - 如何将 R 中的表条目与第二个表的列表条目进行匹配?

转载 作者:行者123 更新时间:2023-12-02 09:33:11 29 4
gpt4 key购买 nike

我有两个表,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 将是相同的。

最佳答案

这是使用data.table包的尝试

library(data.table)
res <- setDT(Table2)[, list(label = unlist(labels)), by = item]
setkey(res, label)[Table1, toString(unique(item)), by = .EACHI]
# label item
# 1: Tom Apple
# 2: Gemma Pear
# 3: Graham Orange, Pear

我在这里所做的基本上是在每个项目的 Table2 中拆分 label。然后,我聚合了每个标签的唯一项,同时执行二进制左连接回到 Table1


编辑您的新Table2,您可以将代码修改为

res <- setDT(Table2)[, list(label = unlist(labels)), by = item]
Table1["item"] <- sapply(Table1$label, function(x) toString(unique(res[grepl(x, label), item])))
Table1
# label item
# 1 Tom Apple
# 2 Gemma Pear
# 3 Graham Orange, Pear

关于r - 如何将 R 中的表条目与第二个表的列表条目进行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651879/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com