将数据帧与数据帧列表相匹配,并将新变量添加到 R 中的列表中

Ama*_*eur 2 r

我有 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 与数据帧列表匹配。

Bry*_*ich 5

坚持基本原则,做你想做的事情是非常简单的:

# 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 个不同行,它就可以工作。