【问题标题】:match a dataframe to a list of dataframe and add a new variable to the list in R将数据框与数据框列表匹配,并将新变量添加到 R 中的列表中
【发布时间】:2012-04-11 11:27:32
【问题描述】:

我有 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        

df2 这是一个数据框列表

[1]  ID     Name   
     1       a 
     3       b
     2       c
     2       a

 [2]  ID     Name
      3      c
      2      b
      2      a
      1      c

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

我有一长串数据框。

我想根据匹配将 df1 中的匹配 ID 和名称添加到 df2 列表中,并将一个名为 loq 的新变量添加到 df2 列表中。

我知道如何在数据框中执行匹配变量,但不知道如何将 df 与数据框列表匹配。

【问题讨论】:

    标签: r


    【解决方案1】:

    保持基础,做你想做的事非常简单:

    # 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 和名称 唯一 定义记录(在数据库术语中,它们必须是该数据表(框架)的复合主键)。这样,通过它们在 df1 中的匹配来合并(连接)df2 列表元素(数据帧)将不会遇到重复,因此不会出现问题。也就是说,只要没有 2 个不同的行具有相同的 ID 和 Name 值,它就会起作用。

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 2016-08-26
      • 2015-04-23
      • 2017-11-27
      相关资源
      最近更新 更多