2016-05-12 2 views
-2

У меня есть два текстовых файла: ped1.txt и ped2.txt. Символ разделения поля - вкладка/пробел.Изменить значения в матрице

ped1.txt

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

ped2.txt

222 -12006 
333 -11998 

Мне нужно закодировать число в файле 1, используя ключ из файла 2, для всех данных. Результат должен быть, как:

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

Как это сделать? Спасибо.

+0

Можете ли вы добавить воспроизводимый пример? – Sotos

+1

попробуйте 'mapvalues' в plyr –

+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() для преобразования первой матрицы в вектор.

Затем используйте mapvalues ​​() из пакета plyr или, возможно, даже более эффективно используйте метод set() из пакета data.table. Метод set() требует, чтобы вы переводили на один столбец data.table после преобразования в вектор.

Когда выполняется перекодировка/замена, вы можете преобразовать обратно в матрицу с помощью матрицы методов (your_new_vector, ncol = original_number_of_cols).

Удачи

Смежные вопросы