-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...

怎么做?谢谢。

4

2 回答 2

0

使用 as.vector() 将第一个矩阵转换为向量。

然后使用 plyr 包中的 mapvalues() 或者更有效地使用 data.table 包中的 set() 方法。set() 方法要求您在转换为向量后转换为单列 data.table。

重新编码/替换完成后,您可以使用方法 matrix(your_new_vector, ncol=original_number_of_cols) 转换回矩阵。

玩得开心

于 2016-05-12T13:53:20.240 回答
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

取决于你的喜好。

于 2016-05-12T13:27:04.883 回答