【问题标题】:Transform elements of a dataframe's column to elements of another dataframe's column if first column is a subset of a column of the second dataframe如果第一列是第二个数据框列的子集,则将数据框列的元素转换为另一个数据框列的元素
【发布时间】:2021-06-02 12:26:45
【问题描述】:

我有 2 个数据框

structure(list(code = c("ATT", "TTT", "ACC", "GGG"), line = c("G1", 
"G2", "G3", "G3"), gspot = c("sd", "sd", "ff", "af"), plot = c(1, 
1, 2, 2)), class = "data.frame", row.names = c(NA, -4L))

structure(list(code = c("ATT", "TTT"), name = c("a", "f")), class = "data.frame", row.names = c(NA, 
-2L))

我想使用 df1 数据帧作为键值结构 key(code)-value(line) 将 df2$code 替换为 df1$line 以生成类似

structure(list(code = c("G1", "G2"), name = c("a", "f")), class = "data.frame", row.names = c(NA, 
-2L))

但我想避免加入和合并,因为我不想保留 df1 的所有列

【问题讨论】:

  • dplyr::left_join(df2, df1) 是你想要的吗?
  • merge(df2, df1) 在基础 R 中?
  • 抱歉我编辑了我的问题

标签: r dataframe


【解决方案1】:

我们可以使用 data.table 中的连接

library(data.table)
setDT(df2)[df1, code := line, on = .(code)]

-输出

df2
   code name
1:   G1    a
2:   G2    f

【讨论】:

    【解决方案2】:

    我认为您可以使用以下解决方案:

    library(dplyr)
    
    df2 %>%
      mutate(code = df1$line[match(df2$code, df1$code)])
    
      code name
    1   G1    a
    2   G2    f
    

    【讨论】:

    • 不错的答案!如果我的列表中有一个 NA 值,那么 match 将每次返回 1 并且 mutate 将返回相同的 df1$line[1] ,它不是 N/A
    • 你的意思是你在line 变量中有NA 值在df1 中?
    • 在 df2$code 中,我想在不同的列表中重新运行,一些值是 NA 并且匹配返回 1
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2022-07-31
    相关资源
    最近更新 更多