Объединить кадры данных по строке, существующей в другой строке - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть два кадра данных, df1 имеет строковое поле, содержащее фразы (от одной до 10 фраз), разделенные запятой, а df2 имеет строковое поле, содержащее от одной до трех фраз, снова разделенных запятой.Я хочу объединить эти два, только если все df2 строковые фразы существуют в df1.Это пример

df1<-matrix(c("aa, bb, cc, dd", "aaa, bbb, ccc, dddd", "ab, bcc, bdd", 10, 20, 30),3,2)
colnames(df1) <- c("Name", "Value")

df2<-matrix(c("aa, bb", "aaa, bbb, ccc", "cc, dd", "dddd", "bcc, bdd", 1, 2, 3, 4, 5),5,2)
colnames(df2) <- c("Name", "ID")

Результаты должны начинаться с этого:

df3<-matrix(c("aa, bb", "aaa, bbb, ccc", 1, 2, 10, 20),2,3)
colnames(df3) <- c("Name", "ID", "Value")

1 Ответ

0 голосов
/ 03 декабря 2018

Использование -

regs <- sapply(df2[,1], function(x){paste0("\\b",x,"\\b")})
keys <- sapply(regs, function(x){grep(x, df1[,1])})
df4 <- cbind(df2,df1[keys,2])
colnames(df4) <- c("Name", "ID", "Value")

Выход

     Name            ID  Value
[1,] "aa, bb"        "1" "10" 
[2,] "aaa, bbb, ccc" "2" "20" 
[3,] "cc, dd"        "3" "10" 
[4,] "dddd"          "4" "20" 
[5,] "bcc, bdd"      "5" "30"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...