【问题标题】:R replacing value if it matches a value in second data frame如果它与第二个数据帧中的值匹配,则 R 替换值
【发布时间】:2021-05-01 19:08:21
【问题描述】:

我对 R 比较陌生,希望你能帮助我:)

我有两个数据框,一个主 DF 和第二个设置条件(第一列)和主 DF 中的值应该被替换的值(第二列)。

例如,mtcars 数据帧的“hp”列中的值“110”应替换为值“3”

df1 <- mtcars

first_column <- c(110, 93, 65)
second_column <- c(3, 2, 1)
df2 <- data.frame(first_column, second_column)

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    我们可以遍历数字列,match 'df2' 的 'first_column' 的列值来获取索引,使用该索引替换为 'second_column' 值(默认情况下,不匹配的元素是在match 中返回 NA),然后我们使用coalesce 将那些 NA 元素替换为原始数据列值

    library(dplyr)
    mtcars %>% 
       mutate(across(where(is.numeric), ~ coalesce(df2$second_column[match(., 
               df2$first_column)], .)))
    
      
    

    【讨论】:

    • 嗨,这很好,谢谢!如果我只想将它用于 mtcars DF 中的“hp”列,你知道我可以在哪里指定这个条件吗?
    • @TomBandmann 如果只有一列,则不需要acrossmtcars %&gt;% mutate(hp = coalesce(df2$second_column[match(hp, df2$first_column)], hp))
    • 有效! :) 非常感谢您的快速回复,感谢您的帮助
    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 2022-07-20
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多