以某种方式联合数据帧,以更新具有相同row.name的行

时间:2018-08-08 13:47:07

标签: r dataframe rbind rowname

我想做两个数据帧的并集,它们共享具有相同rowName的某些行。对于那些具有通用rowName的行,我想考虑第二个数据框值,而不是第一个。例如:

Sub Fill_Rows()


Dim X As Range
Let Y = Range("C2")

For Each X In Range("B2:B5000")
    If X = "" And Y <> "" Then
        X = "Correct"
    End If
    Y = Y + 1
Next X


End Sub

那么我想要获得的结果将是:

df1 <- data.frame(col1 = c(1,2), col2 = c(2,4), row.names = c("row_1", "row_2"))
df1
#       col1 col2
# row_1    1    2
# row_2    2    4

df2 <- data.frame(col1 = c(3,6), col2 = c(10,99), row.names = c("row_3", "row_2"))
df2
#       col1 col2
# row_3    3    6
# row_2    10  99

函数rbind不能完成工作,实际上它会为通用行更新rowName。

2 个答案:

答案 0 :(得分:3)

我将其概念化为仅将df2中尚不存在的行添加到df1中:

rbind(df2, df1[setdiff(rownames(df1), rownames(df2)), ])

答案 1 :(得分:2)

我们获得duplicated个元素的索引,并将其用于filter

rbind(df2, df1)[!duplicated(c(row.names(df2), row.names(df1))),]