【问题标题】:Updating old dataframe with new dataframe in R用 R 中的新数据框更新旧数据框
【发布时间】:2020-09-22 15:43:22
【问题描述】:

我正在使用新数据帧中的数据更新旧数据帧。

I found this option,它适用于某些领域,但不是全部。不知道如何改变它,因为它超出了我的技能范围。我尝试删除 ifelse 代码的 is.na(x) 部分,但没有成功。

df_old <- data.frame(
      bb = as.character(c("A", "A", "A", "B", "B", "B")),
      y = as.character(c("i", "ii", "ii", "i", "iii", "i")),
      z = 1:6,
      aa = c(NA, NA, 123, NA, NA, 12))

df_new <- data.frame(
      bb = as.character(c("A", "A", "A", "B", "A", "A")),
      z = 1:6,
      aa = c(NA, NA, 123, 1234, NA, 12))

cols <- names(df_new)[names(df_new) != "z"]

df_old[,cols] <- mapply(function(x, y) ifelse(is.na(x), y[df_new$z == df_old$z], x), df_old[,cols], df_new[,cols])

该代码还将我的 bb 变量从字符向量更改为数字。我是否需要再次调用 mapply 来关注特定变量 bb

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    要更新aabb 列,您可以通过merge() 使用连接来解决此问题。这假定列 z 是这些数据帧的索引。

    # join on `z` column
    df_final<- merge(df_old, df_new, by = c("z"))
    # replace NAs with new values for column `aa` from `df_new`
    df_final$aa <- ifelse(is.na(df_final$aa.x), df_final$aa.y, df_final$aa.x)
    # choose new values for column `bb` from `df_new`
    df_final$bb <- df_final$bb.y
    df_final<- df_final[,c("bb", "z", "y", "aa")]
    
    df_final
      bb z   y   aa
    1  A 1   i   NA
    2  A 2  ii   NA
    3  A 3  ii  123
    4  B 4   i 1234
    5  A 5 iii   NA
    6  A 6   i   12
    

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-31
      • 2015-12-30
      • 1970-01-01
      • 2018-09-18
      相关资源
      最近更新 更多