改变矩阵中的值
Change values in a matrix
我有两个文本文件:ped1.txt
和 ped2.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).
转换回矩阵
玩得开心
我有两个文本文件:ped1.txt
和 ped2.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).
转换回矩阵玩得开心