Я был занят этим вопросом с прошлой ночи, и я не мог понять, как это сделать.
Что я хочу сделать, это сопоставить строки df1 с строками df2 и получить похожие теги
что я делаю, так это
# a function to arrange the data to have IDs for each string
normalize <- function(x, delim) {
x <- gsub(")", "", x, fixed=TRUE)
x <- gsub("(", "", x, fixed=TRUE)
idx <- rep(seq_len(length(x)), times=nchar(gsub(sprintf("[^%s]",delim), "", as.character(x)))+1)
names <- unlist(strsplit(as.character(x), delim))
return(setNames(idx, names))
}
# a function to arrange the second df
lookup <- normalize(df2[,1], ",")
# a function to match them and give the IDs
process <- function(s) {
lookup_try <- lookup[names(s)]
found <- which(!is.na(lookup_try))
pos <- lookup_try[names(s)[found]]
return(paste(s[found], pos, sep="-"))
#change the last line to "return(as.character(pos))" to get only the result as in the comment
}
тогда я получаю такие результаты как
res <- lapply(colnames(df1), function(x) process(normalize(df1[,x], ";")))
Это дает мне номер строки каждой строки из df1 и номер строки строки из df2, которая соответствует. поэтому вывод этих данных выглядит следующим образом:
> res
$s1
[1] "3-4" "4-1" "5-4"
$s2
[1] "2-4" "3-15" "7-16"
Идентификаторы первых столбцов - это номер строки df2, который соответствует строкам в df1 Второй столбец "Нет" - это количество совпадений Третий столбец ID-col-n - это номер строки строки в df1, который соответствует этой строке + имя столбца четвертая строка из первого столбца df1, который соответствует этой строке пятый столбец - это строка второго столбца, которая соответствует этой строке и т.д.