2016-05-12 76 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)将其转换回矩阵。

玩得开心