2016-01-26 3 views
0

У меня есть две матрицы. «порядок» - это матрица с порядком, в котором я хочу, чтобы данные в (где 1 - это события, а нули - не-события). Каждая строка дает порядок для каждой записи. Тем не менее, я не хочу здесь 1 или 0, я хочу значение, A или B или что-то еще.R: отображает значения одной матрицы на порядок другой матрицы

orders <- structure(c("1", "1", "1", "1", "1", "1", "0", "1", "0", "0", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", 
"1", "1", "1", "0", "0", "0", "0", "0", "1", "0", "0", "0", "1", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), c("1", 
"2", "3", "4", "5", "6", "7", "8"))) 

Матрица «значения» представляет значения, которые я хочу отобразить в указанном выше порядке. Таким образом, A и B заменят 1. Нулевые ставки остаются. Поэтому, если строка i начинается с AAB ... для значений, а порядок строки i равен 100101, тогда результат должен быть A00A0B.

values <- structure(c("A", "B", "A", "B", "A", "B", "A", "B", "0", "0", 
"A", "B", "A", "B", "0", "0", "0", "B", "0", "B", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L)) 

Так что выход я надеюсь выглядит следующим образом:

desired <- structure(c("A", "B", "A", "B", "A", "B", "0", "B", "0", "0", 
"0", "0", "0", "0", "0", "0", "A", "0", "0", "0", "0", "0", "0", 
"B", "A", "B", "0", "0", "0", "0", "0", "B", "0", "0", "0", "B", 
"0", "0", "0", "0", "0", "0", "A", "0", "0", "0", "0", "0"), .Dim = c(6L, 
8L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), c("1", 
"2", "3", "4", "5", "6", "7", "8"))) 

Я возиться с петлями для часов, пытаясь получить эту работу в R, и это сводит меня орехи. Я сильно подозреваю, что здесь есть опция non-for loop, но мне, честно говоря, все равно, как я получаю конечный результат. Компьютерное время не является фактором, мой набор данных находится только в сотнях строк. Следует также отметить, что матрицы имеют одинаковый размер. Спасибо!

ответ

0

Ну я нашел простой ответ, который требует цикла, но это то, что, по крайней мере:

desired <- orders 
for (i in 1:nrow(data)){ 
    desired[i,which(orders[i,]=="1")] <- values[i,which(values[i,]!="0")]} 
Смежные вопросы