2016-05-12 100 views
-2

我有兩個文本文件:ped1.txtped2.txt。字段分隔字符是製表符/空格。更改矩陣中的值

ped1.txt

222 333 444 
333 458 458 
458 774 556 
500K lines... 

ped2.txt

222 -12006 
333 -11998 

我需要用鑰匙從文件2在文件1重新編碼的數字,所有的數據。 結果應該是這樣的:

-12006 -11998 444 
-11998 458 458 
    458 774 556 
500K lines... 

怎麼辦? 謝謝。

+0

你可以添加一個可重複的例子嗎? – Sotos

+1

試穿plyr中的mapvalues –

+0

譜系重編號 – Andrew

回答

0

隨着

ped1 
# V1 V2 V3 
# 1 222 333 444 
# 2 333 458 458 
# 3 458 774 556 
ped2 
# V1  V2 
# 1 222 -12006 
# 2 333 -11998 

您可以執行:根據您的喜好

apply(ped1, c(1,2), function(x) ifelse(x %in% ped2$V1, ped2$V2[ped2$V1 == x], x)) 
#   V1  V2 V3 
# [1,] -12006 -11998 444 
# [2,] -11998 458 458 
# [3,] 458 774 556 

sapply(ped1, function(x) plyr::mapvalues(x, ped2$V1, ped2$V2, FALSE)) 
#   V1  V2 V3 
# [1,] -12006 -11998 444 
# [2,] -11998 458 458 
# [3,] 458 774 556 

0

使用as.vector()將第一個矩陣轉換爲向量。

然後使用plyr包中的mapvalues(),或者更有效地使用data.table包中的set()方法。 set()方法需要在轉換爲向量後轉換爲單列data.table。

當記錄/替換完成時,可以使用方法矩陣(your_new_vector,ncol = original_number_of_cols)將其轉換回矩陣。

玩得開心