如何根据列名之间的数据框切换数据框,并在其间使用查找表。
Orig
A B C
1 2 3
2 2 2
4 5 6
Ret
D E
7 8
8 9
2 4
lookup <- data.frame(Orig=c('A','B','C'),Ret=c('D','D','E'))
Orig Ret
1 A D
2 B D
3 C E
这样最终的数据框就是
A B C
7 7 8
8 8 9
2 2 4
答案 0 :(得分:2)
我们可以match
&#39; Orig&#39;列中&#39;查找&#39;列名为&#39; Orig&#39;找到数字索引(虽然它的顺序相同,但在其他情况下可能会有所不同),得到相应的&#39; Ret&#39;基于此的元素。我们使用它来分配&#39; Ret&#39;数据集并将输出分配回原始数据集。在这里,我制作了一份&#34; Orig&#34;。
OrigN <- Orig
OrigN[] <- Ret[as.character(lookup$Ret[match(as.character(lookup$Orig),
colnames(Orig))])]
OrigN
# A B C
#1 7 7 8
#2 8 8 9
#3 2 2 4
注意:as.character
用作&#39; lookup&#39;中的列。是factor
类。
答案 1 :(得分:1)
我相信以下内容也会奏效。
OrigN <- Orig
OrigN[, as.character(lookup$Orig)] <- Ret[, as.character(lookup$Ret)]
此方法将一个列shuffle应用于Orig(实际上是@Akrun之后的副本OrigN),然后使用查找使用适当排序的Ret列填充这些列。