У меня есть следующие кадры данных df1 и df2. Это всего лишь примеры, мои настоящие данные имеют около 1000 строк и 10 столбцов.
df1 = data.frame(V1 = c(1,2), V2 = c("a, b, d", "c, g"))
> df1
V1 V2
1 1 a, b, d
2 2 c, g
df2 = data.frame(V3 = c(1,2,3), V4 = c("a, c", "b, e", "a, g"))
> df2
V3 V4
1 1 a, c
2 2 b, e
3 3 a, g
Как видите, столбцы V2 и V4 содержат значения, разделенные ", "
.
I Теперь я хочу провести l oop через мой df1 строка за строкой и проверить, совпадает ли какое-либо из значений, присутствующих в V2, с одним из значений, присутствующих в V4. Поэтому я не хочу сравнивать все содержимое столбца, но значение на значение.
Вот так должен выглядеть мой вывод df3
df3 = data.frame(V1 = c(1, 1, 1, 2, 2), V2 = c("a, b, d", "a, b, d", "a, b, d", "c, g", "c, g"), V5 = c("a","a","b","c","g"), V3 = c(1, 3, 2, 1, 3), V4 = c("a, c","a, g", "b, e", "a, c", "a, g"), V6 = c("a", "a","b", "c", "g"))
> df3
V1 V2 V5 V3 V4 V6
1 1 a, b, d a 1 a, c a
2 1 a, b, d a 3 a, g a
3 1 a, b, d b 2 b, e b
4 2 c, g c 1 a, c c
5 2 c, g g 3 a, g g
Давайте посмотрим на первую строку df1 , В V2 есть значения «a», «b» и «d». Мы начинаем с «а» и смотрим в df2, если «а» присутствует в V4. Это верно для строк 1 и 3 df2. Мы создаем две строки в выводе df3. Строка 1 содержит информацию о первом совпадении: исходные столбцы V1, V2, V3 и V4 + 2 новых столбца V5 и V6, которые содержат совпадающее значение «a» из df1 и df2 соответственно.
Надеюсь, это понятно.
Я бы начал с for для l oop, и я подумал, что может потребоваться разделить мои столбцы V2 на ',', но я не уверен это необходимо.
for (row in 1:nrow(df1)) {
// split col V2 of df1 by ','
// if V2 %in% in df2$V4 ...
}