Как преобразовать матрицу в кадр данных с именами столбцов и строк из исходного кадра данных - PullRequest
1 голос
/ 16 апреля 2019

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

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

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

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

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

> 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 голос
/ 16 апреля 2019

Мы можем использовать присвоение 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...