Есть ли функция R для извлечения значений из матрицы имен столбцов?

У меня есть матрица M, состоящая из имен столбцов из фрейма данных с одной строкой, так что каждое имя столбца имеет только одно соответствующее значение в фрейме данных. Есть ли функция для создания новой матрицы с соответствующими значениями из имен столбцов в M?

M <- t(data.frame(A=c("label_1","label_2","label_3"),
                  B=c("label_4","label_5","label_6"),
                  C=c("label_7","label_8","label_9")))
M
>   [,1]      [,2]      [,3]     
A "label_1" "label_2" "label_3"
B "label_4" "label_5" "label_6"
C "label_7" "label_8" "label_9"

df <- data.frame(label_2=5, label_1=0, label_4=7,
                 label_6=15, label_3=12, label_5=11,
                 label_9=9, label_8=15, label_7=35)
df
>   label_2 label_1 label_4 label_6 label_3 label_5 label_9 label_8 label_7
1       5       0       7      15      12      11       9      15      35

## I want to create a new data.frame with the values from these labels
> [,1] [,2] [,3]
A    0    5   12
B    7   11   15
C   35   15    9

Я знаю один из возможных способов — преобразовать фрейм данных df в пару ключ-значение, где k = имена столбцов, а v = значения. Затем я мог бы получить значения, используя:

apply(M,2,function(x){df[df$k==x,"v"]})

Но это кажется слишком сложным для того, что должно быть простой операцией...

Кроме того, я бы предпочел не использовать какие-либо библиотеки за пределами dplyr или tidyr, чтобы свести к минимуму зависимости, необходимые в моем коде.


person Isaac Fink    schedule 17.08.2019    source источник
comment
Мне трудно понять, о чем вы просите. Не могли бы вы опубликовать некоторые примеры данных для M и df?   -  person Chris    schedule 17.08.2019
comment
Пожалуйста, приведите небольшой воспроизводимый пример.   -  person Roman Luštrik    schedule 17.08.2019
comment
Во всяком случае, это должно быть df[df[[k]]==x, v]. Но я действительно не понимаю, что вы пытаетесь сделать.   -  person Rui Barradas    schedule 17.08.2019
comment
Я отредактировал сообщение с некоторыми примерами данных и тем, как должен выглядеть результат. Спасибо!   -  person Isaac Fink    schedule 17.08.2019


Ответы (1)


Обновлен до более простого кода с использованием предложения Onyambu:

M <- t(data.frame(A=c("label_1","label_2","label_3"),
                  B=c("label_4","label_5","label_6"),
                  C=c("label_7","label_8","label_9")))

df <- data.frame(label_2=5, label_1=0, label_4=7,
                 label_6=15, label_3=12, label_5=11,
                 label_9=9, label_8=15, label_7=35)

P<-matrix(df[c(M)],nrow(M))
P
> P
     [,1] [,2] [,3]
[1,] 0    5    12  
[2,] 7    11   15  
[3,] 35   15   9   
person Roee Anuar    schedule 20.08.2019
comment
@Onyambu - еще лучше! - person Roee Anuar; 20.08.2019
comment
Спасибо, это намного быстрее, чем использование apply! - person Isaac Fink; 20.08.2019