R 从一个数据帧的不同列创建一个新列,条件是另一个数据帧的另一列

R 从一个数据帧的不同列创建一个新列,条件是另一个数据帧的另一列,r,data.table,R,Data.table,假设我有两个数据帧 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您可以尝试这样做,C列可以指示来自df1的列值 setDT(df1) df1[,e:=eval(parse(text=names(df1)[C])),by=1:nrow(df1)] df1 A B C e 1: 1 7 1 1 2: 2 8 2 8 3:

假设我有两个数据帧

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您可以尝试这样做,C列可以指示来自df1的列值

setDT(df1)
df1[,e:=eval(parse(text=names(df1)[C])),by=1:nrow(df1)]
df1

A B C e
1: 1  7 1  1
2: 2  8 2  8
3: 3  9 1  3
4: 4 10 2 10
5: 5 11 1  5

6:612212

以下是我的做法:

df1[df2, on=.(C), D := i.D][, E := .SD[[.BY$D]], by=D]

   A  B C D  E
1: 1  7 1 A  1
2: 2  8 2 B  8
3: 3  9 1 A  3
4: 4 10 2 B 10
5: 5 11 1 A  5
6: 6 12 2 B 12

这通过引用将列添加到
df1
,而不是创建新表,因此我想这比构建
df3
更有效。此外,由于它们被添加到
df1
,因此行保留其原始顺序。

如果标记为重复,则表示答案在另一个问题中;)抱歉让人困惑,更新后的问题现在与原来的问题不同,df2在您的真实数据中有多少行?我在df1中有31308885行,在df2中有4行请参阅我的答案,看看它是否有效。不要合并,而是创建一个命名的向量。请不要忘记添加一些文本来解释你的答案-为什么它有效以及它如何解决原始问题。
df1[df2, on=.(C), D := i.D][, E := .SD[[.BY$D]], by=D]

   A  B C D  E
1: 1  7 1 A  1
2: 2  8 2 B  8
3: 3  9 1 A  3
4: 4 10 2 B 10
5: 5 11 1 A  5
6: 6 12 2 B 12