我有 2 个独立的数据框
df1
ID Name loq
1 a 1.2
1 b 1.4
1 c 1.0
2 a 0.5
2 b 0.7
2 c 0.3
3 a 0.5
3 b 0.2
3 c 0.1
Run Code Online (Sandbox Code Playgroud)
df2 这是数据帧列表
[1] ID Name
1 a
3 b
2 c
2 a
[2] ID Name
3 c
2 b
2 a
1 c
Run Code Online (Sandbox Code Playgroud)
df2 的结果如下所示
[1] ID Name loq
1 a 1.2
3 b 0.2
2 c 0.3
2 a 0.5
[2] ID Name loq
3 c 0.1
2 b 0.7
2 a 0.5
1 c 1.0
Run Code Online (Sandbox Code Playgroud)
我有一长串数据框。
我想将匹配 ID 和名称从 df1 添加到 df2 列表,并根据匹配将一个名为 loq 的新变量添加到 df2 列表。
我知道如何在数据帧内执行匹配变量,但不知道如何将 df 与数据帧列表匹配。
坚持基本原则,做你想做的事情是非常简单的:
# 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
Run Code Online (Sandbox Code Playgroud)
您还可以手动指定要合并的内容。在本例中,它查找匹配的列名称:c(ID, Name)。如果你想将 df2 放入数据框中,你可以这样做
do.call("rbind.data.frame", df2) # uses df2 list elements as arguments to rbind
Run Code Online (Sandbox Code Playgroud)
这里的关键是列 ID 和名称唯一地定义记录(在数据库术语中,它们必须是该数据表(框架)的复合主键)。这样,通过 df1 中的匹配项合并(连接) df2 列表元素(数据帧)将不会出现重复,因此不会出现问题。这就是说,只要不存在具有相同 ID 和 Name 值的 2 个不同行,它就可以工作。