【发布时间】:2017-08-29 10:48:05
【问题描述】:
假设我有两个数据框
df1 <- data.frame(A = 1:6, B = 7:12, C = rep(1:2, 3))
df2 <- data.frame(C = 1:2, D = c("A", "B"))
我想在 df1 中创建一个新的 E 列,其值基于 C 列的值,然后可以将其连接到 df2 中的 D 列。例如,df1 第一行的 C 值为“1”。而df2中C列的值1对应D列的“A”,所以df2中创建的值E应该来自“A”列,即1。
按照Select values from different columns based on a variable containing column names的建议,我可以通过两步来实现:
setDT(df1)
setDT(df2)
df3 <- df1[df2, on = "C"] # step 1 combines the two data.tables
df3[, E := .SD[[.BY[[1]]]], by = D] # step 2
我的问题是:我们可以一步完成吗?此外,由于我的数据比较大,这个原始解决方案的第一步需要很多时间。我们能以更快的方式做到这一点吗? 有什么建议么?
【问题讨论】:
-
如果被标记为重复,则表示答案在另一个问题中;)
-
抱歉造成混淆,更新后的问题与原来的问题不同
-
df2 在你的真实数据中有多少行?
-
我在 df1 中有 31308885 行,在 df2 中有 4 行
-
查看我的回答here,看看它是否有效。不要合并,而是创建一个命名向量。
标签: r data.table