Я пытаюсь сравнить два набора данных, первый из которых - стандартный фрейм данных, а другой - фрейм данных со столбцом списка.Моя цель - сравнить каждый элемент из списка в столбце списка var34
с двумя переменными в df_i
, которые называются var1
и var2
.
В случае, когда они равны, я хотел бы, чтобы элемент списка был равен (равен var1
и var2
) и переменной flag
в конечном наборе данных.
Возможно ли сделать это в R без использования какого-либо типа dplyr::join
и без перестановки переменных?
Идеальным решением будет цикл, который проходит строка за строкой через набор данных df_i
и проверяет, какой элемент в какой строке в df_list
удовлетворяет условию равенства.
Воспроизводимый пример:
# dataframe to be compared
df_i <- data.frame(id = c(1,1,1,2,2,3), var1 = c(1,2,4,6,4,2), var2 = c(2,4,5,2,1,6))
# dataframe with list column to compare to df_i
df_list <- data.frame(
id = c(1,1,2,2,2,2,2,3,3),
var34 = I(list(c(4,7),c(1,2),c(1,5),c(1,3),c(4,1),c(1,3),c(6,2),c(3,9),c(2,6)))) %>%
group_by(id) %>% summarise(var34 = list(var34)) %>% mutate(flag = c("c", "b", "f"))
# desired output
df_e <- data.frame(
id = c(1,1,1,2,2,3),
var1 = c(1,2,4,6,4,2),
var2 = c(2,4,5,2,1,6),
flag = c(NA, "c", NA, "b", "b", "f"),
var5 = I(list(NA,c(1,2),NA,c(4,1),c(6,2),c(2,6)))))