テーブルが 2 つあり、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 は同じになります。