更新R中的数据帧行

时间:2015-10-02 02:16:12

标签: r

假设我从数据框开始:

 ID Measurement1 Measurement2
  1           45          104
  2           34           87
  3           23           99
  4           56           67
...

然后我有第二个数据框,用于更新第一个中的记录:

 ID Measurement1 Measurement2
  2           10           11
  4           21           22

如何使用R结束:

 ID Measurement1 Measurement2
  1           45          104
  2           10           11
  3           23           99
  4           21           22
...

实际上数据框是非常大的数据集。

3 个答案:

答案 0 :(得分:15)

我们可以使用$(function(){ $("#find").on('click',function () { alert("Hi"); }); }); 来获取行索引。使用该索引对行进行子集化,我们将第一个数据集的第2列和第3列替换为第二个数据集的相应列。

match

或者我们可以使用ind <- match(df2$ID, df1$ID) df1[ind, 2:3] <- df2[2:3] df1 # ID Measurement1 Measurement2 #1 1 45 104 #2 2 10 11 #3 3 23 99 #4 4 21 22 加入数据集data.table'ID'列(将第一个数据集转换为'data.table',即on),并指定' Cols'与第二个数据集中的'iCols'。

setDT(df1)

数据

 library(data.table)#v1.9.6+
 Cols <- names(df1)[-1]
 iCols <- paste0('i.', Cols)
 setDT(df1)[df2, (Cols) := mget(iCols), on= 'ID'][]
 #   ID Measurement1 Measurement2
 #1:  1           45          104
 #2:  2           10           11
 #3:  3           23           99
 #4:  4           21           22

答案 1 :(得分:7)

library(dplyr)

df1 %>%
  anti_join(df2, by = "ID") %>%
  bind_rows(df2) %>%
  arrange(ID)

答案 2 :(得分:0)

dplyr 1.0.0引入了一系列SQL启发性的函数,用于修改行。在这种情况下,您现在可以使用rows_update()

library(dplyr)

df1 %>%
  rows_update(df2, by = "ID")

  ID Measurement1 Measurement2
1  1           45          104
2  2           10           11
3  3           23           99
4  4           21           22