改变矩阵中的值

Change values in a matrix

我有两个文本文件:ped1.txtped2.txt。字段分隔符为tab/space.

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

怎么做? 谢谢。

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

取决于您的喜好。

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

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

完成 recoding/replacements 后,您可以使用方法 matrix(your_new_vector, ncol=original_number_of_cols).

转换回矩阵

玩得开心