2016-05-24 197 views
2

如何根據列名之間的列名切換數據幀,並在兩者之間查找表。根據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

我們可以match在「查找」中的「原稿」列與「原稿」的列名,找到數字索引(雖然,它是以相同的順序,在其他情況下可能不同),根據它得到相應的'Ret'元素。我們使用它來對'Ret'數據集進行子集化並將輸出分配回原始數據集。在這裏我做了一個「Orig」的副本。

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作爲在 '查找' 中的列是factor類。

+1

謝謝,這個工作很漂亮 – SQLnRprobs

1

我相信下面的工作也會如此。

OrigN <- Orig 
OrigN[, as.character(lookup$Orig)] <- Ret[, as.character(lookup$Ret)] 

此方法適用於一列洗牌到原稿(實際上以下@Akrun副本生產地),然後用使用查找懲戒的適當排序的列填充這些列。

+0

這也適用於我需要的,謝謝 – SQLnRprobs

+0

當然,@SQLnRprobs。如果這個答案很有用,你可以通過點擊上面的三角形給它一個「upvote」。 – lmo