如何根據列名之間的列名切換數據幀,並在兩者之間查找表。根據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
如何根據列名之間的列名切換數據幀,並在兩者之間查找表。根據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
我們可以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
類。
我相信下面的工作也會如此。
OrigN <- Orig
OrigN[, as.character(lookup$Orig)] <- Ret[, as.character(lookup$Ret)]
此方法適用於一列洗牌到原稿(實際上以下@Akrun副本生產地),然後用使用查找懲戒的適當排序的列填充這些列。
這也適用於我需要的,謝謝 – SQLnRprobs
當然,@SQLnRprobs。如果這個答案很有用,你可以通過點擊上面的三角形給它一個「upvote」。 – lmo
謝謝,這個工作很漂亮 – SQLnRprobs