从另一个 table 引用列名称以从共享 ID 插入值

Reference column name from another table to insert value from shared ID

我正在尝试根据我的主数据框 (df1$reference) 中的列名列将另一个数据框 (df2) 中的列引用到 return ID 和列名匹配的确切值在新列 (df1$new_col) 中。这是我的数据和预期结果的简化示例:

我试过 rbind 但 运行 由于 rows/columns 数量的差异而出错。我也尝试了 bind_rows/bind_cols,但我很难只连接引用的数据(我想避免大连接,因为我的真实数据有更多的列)。我觉得索引可以做到这一点,但我对简单任务之外的索引不太熟悉。我愿意接受任何和所有的建议/方法!

我们可以使用row/column索引

DF1$new_col <- DF2[-1][cbind(seq_len(nrow(DF1)), 
        match(DF1$reference, names(DF2)[-1]))]

-输出

> DF1
  ID value reference new_col
1  1     4      colD      no
2  2     5      colD      no
3  3     6      colE      no

数据


DF1 <- structure(list(ID = 1:3, value = 4:6, reference = c("colD", "colD", 
"colE")), class = "data.frame", row.names = c(NA, -3L))

DF2 <- structure(list(ID = 1:3, colD = c("no", "no", "yes"), colE = c("yes", 
"no", "no"), colF = c("no", "yes", "no")), 
class = "data.frame", row.names = c(NA, 
-3L))

也许是这样的?

library(dplyr)
left_join(DF1, DF2, by="ID") %>% 
  mutate(New_col = case_when(reference=="colD" ~ colD,
                             reference=="colE" ~ colE,
                             reference=="colF" ~ colF)) %>% 
  select(ID, value, reference, New_col)
  ID value reference New_col
1  1     4      colD      no
2  2     5      colD      no
3  3     6      colE      no