Придерживаясь базы, довольно просто делать то, что вы хотите:
# Create the data frames/lists
df1 <- data.frame(
ID = gl(3,3),
Name = rep(letters[1:3], 3),
loq = c(1.2, 1.4, 1.0, 0.5, 0.7, 0.3, 0.5, 0.2, 0.1)
)
df2 <- list()
df2[[1]] <- data.frame(ID = factor(c(1, 3, 2, 2)), Name = c('a', 'b', 'c', 'a'))
df2[[2]] <- data.frame(ID = factor(c(3, 2, 2, 1)), Name = c('c', 'b', 'a', 'c'))
lapply(df2, merge, y = df1) # merge df2 list elements accordingly to df1
Вы также можете вручную указать, что объединять. В этом случае он ищет совпадающие имена столбцов: c (ID, Name). Если вы хотите поместить df2 в фрейм данных, вы можете сделать что-то вроде
do.call("rbind.data.frame", df2) # uses df2 list elements as arguments to rbind
Ключевым моментом здесь является то, что столбцы ID и Имя однозначно определяют запись (в терминах базы данных они должны быть составным первичным ключом для этой таблицы данных (фрейма)). Таким образом, объединение (объединение) элементов списка df2 (фреймов данных) по их совпадениям в df1 не приведет к дублированию и, следовательно, к проблемам. Это значит, что он будет работать до тех пор, пока не будет 2 разных строки с одинаковыми значениями ID и Name.