根据R

时间:2016-05-24 18:45:03

标签: r

如何根据列名之间的数据框切换数据框,并在其间使用查找表。

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

2 个答案:

答案 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列填充这些列。

相关问题