Как преобразовать матрицу во фрейм данных с именами столбцов и строк из исходного фрейма данных

#r #dataframe #matrix

#r #фрейм данных #матрица

Вопрос:

У меня есть следующий исходный фрейм данных:

 original_df <- structure(c(0, 0, 0, 0, 1, 0, 0, 0, 0), .Dim = c(3L, 3L), .Dimnames = list(
  c("foo", "bar", "qux"), c("A", "B", "C")
))

original_df
#>     A B C
#> foo 0 0 0
#> bar 0 1 0
#> qux 0 0 0
 

А затем я выполняю некоторое преобразование, которое приводит к простой матрице:

 transformed_mat <- structure(c(
  -2.96100772320745e-06, 1.68169240440672e-05, -0.000126831814542474,
  -9.94017331567414e-07, 0.000763027661834236, -0.000103315552273569,
  -2.22776698138103e-06, 2.94317362067914e-05, -0.000190660599719715
), .Dim = c(3L, 3L))

transformed_mat
#>               [,1]          [,2]          [,3]
#> [1,] -2.961008e-06 -9.940173e-07 -2.227767e-06
#> [2,]  1.681692e-05  7.630277e-04  2.943174e-05
#> [3,] -1.268318e-04 -1.033156e-04 -1.906606e-04
 

Как я могу замаскировать преобразованную матрицу именами столбцов и строк из original data frame ?

Желаемый результат:

                 A            B              C
foo -2.961008e-06 -9.940173e-07 -2.227767e-06
bar  1.681692e-05  7.630277e-04  2.943174e-05
qux -1.268318e-04 -1.033156e-04 -1.906606e-04
 

Ответ №1:

Мы можем использовать dimnames присваивание, поскольку это оба matrix es

 dimnames(transformed_mat) <- dimnames(original_df)
transformed_mat
#                A             B             C
#foo -2.961008e-06 -9.940173e-07 -2.227767e-06
#bar  1.681692e-05  7.630277e-04  2.943174e-05
#qux -1.268318e-04 -1.033156e-04 -1.906606e-04
 

Поскольку dimnames это атрибут, другой способ — attr через присвоение

 attr(transformed_mat, "dimnames") <- attr(original_df, "dimnames")
 

Ответ №2:

просто используйте: dimnames(transformed_mat)<-dimnames(original_df)

Смотрите рабочий пример ниже:

 > transformed_mat
            A             B             C
foo -2.961008e-06 -9.940173e-07 -2.227767e-06
bar  1.681692e-05  7.630277e-04  2.943174e-05
qux -1.268318e-04 -1.033156e-04 -1.906606e-04
>
>
>
> original_df <- structure(c(0, 0, 0, 0, 1, 0, 0, 0, 0), .Dim = c(3L, 3L), .Dimnames = list(
      c("foo", "bar", "qux"), c("A", "B", "C")
  ))
> original_df
A B C
foo 0 0 0
bar 0 1 0
qux 0 0 0
> transformed_mat <- structure(c(
      -2.96100772320745e-06, 1.68169240440672e-05, -0.000126831814542474,
      -9.94017331567414e-07, 0.000763027661834236, -0.000103315552273569,
      -2.22776698138103e-06, 2.94317362067914e-05, -0.000190660599719715
  ), .Dim = c(3L, 3L))
> transformed_mat
              [,1]          [,2]          [,3]
[1,] -2.961008e-06 -9.940173e-07 -2.227767e-06
[2,]  1.681692e-05  7.630277e-04  2.943174e-05
[3,] -1.268318e-04 -1.033156e-04 -1.906606e-04
> dimnames(transformed_mat)<-dimnames(original_df)
> transformed_mat
                A             B             C
foo -2.961008e-06 -9.940173e-07 -2.227767e-06
bar  1.681692e-05  7.630277e-04  2.943174e-05
qux -1.268318e-04 -1.033156e-04 -1.906606e-04
 

Комментарии:

1. да, сэр, это то же самое. Я думаю, что он застрял в черновике дольше, чем обычно.

2. Хорошо, нет проблем. Я думаю, мы можем обвинить трафик : =)