假设我从数据框开始:
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
...
实际上数据框是非常大的数据集。
答案 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