替换数据框的子集

时间:2019-06-02 19:49:03

标签: r dataframe

我的数据框有一些错误

T item   V1   V2
1 a      2     .1
2 a      5     .8
1 b      1     .7
2 b      2     .2

我还有另一个数据框,仅对与V1有关的项目进行了修正

T item   V1
1 a       2
2 a       6

如何获得最终数据帧?我应该使用合并还是rbind。注意:实际数据帧很大。

2 个答案:

答案 0 :(得分:0)

这应该有效-

library(dplyr)

df1 %>%
  left_join(df2, by = c("T", "item")) %>%
  mutate(
    V1 = coalesce(as.numeric(V1.y), as.numeric(V1.x))
  ) %>%
  select(-V1.x, -V1.y)

答案 1 :(得分:0)

一个选项可以是data.table连接on的'T','item'并为第二个数据集中的'V1'分配相应的'V1'列(i.V1

library(data.table)
setDT(df1)[df2, V1 := i.V1, on = .(T, item)]
df1
#   T item V1  V2
#1: 1    a  2 0.1
#2: 2    a  6 0.8
#3: 1    b  1 0.7
#4: 2    b  2 0.2

数据

df1 <- structure(list(T = c(1L, 2L, 1L, 2L), item = c("a", "a", "b", 
"b"), V1 = c(2L, 5L, 1L, 2L), V2 = c(0.1, 0.8, 0.7, 0.2)), 
 class = "data.frame", row.names = c(NA, -4L))


df2 <- structure(list(T = 1:2, item = c("a", "a"), V1 = c(2L, 6L)), 
  class = "data.frame", row.names = c(NA, 
-2L))