从另一个 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
我正在尝试根据我的主数据框 (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