Функция транспонирования в R неожиданно меняет значения - PullRequest
0 голосов
/ 14 мая 2019

У меня есть следующий фрейм данных, который мне нужно транспонировать

                      A                 B
4                   4024               4796
5                   4130               4796
6                   4130               4796
7                   4130               4796
8                   4067               4687
9                   4067               4687

Когда я использую t (df), я получаю следующий вывод:

        4             5             6             7             8
A 1.988120e-320 2.040491e-320 2.040491e-320 2.040491e-320 2.009365e-320
B 2.369539e-320 2.369539e-320 2.369539e-320 2.369539e-320 2.315686e-320
        9
A 2.009365e-320
B 2.315686e-320

Почему меняются значения

1 Ответ

1 голос
/ 14 мая 2019

Опция будет gather для столбца «A», «B» в «длинный» формат после создания столбца из имен строк, затем spread в «широкий» формат и изменить столбец «key» на имя строки

library(tidyverse)
rownames_to_column(df1, 'rn') %>% 
  gather(key, val, A:B) %>% 
  spread(rn, val) %>%
  column_to_rownames('key')
#    4    5    6    7    8    9
#A 4024 4130 4130 4130 4067 4067
#B 4796 4796 4796 4796 4687 4687

Причина, по которой значения меняются, заключается в том, что столбцы имеют значение factor и путем транспонирования преобразуются в matrix, где значения factor изменяются на целочисленное значение

.

Можно было бы сначала преобразовать столбцы в character, затем в integer (при необходимости) и выполнить транспонирование

t(sapply(df1, function(x) as.integer(as.character(x))))

данные

df1 <- structure(list(A = c(4024L, 4130L, 4130L, 4130L, 4067L, 4067L
), B = c(4796L, 4796L, 4796L, 4796L, 4687L, 4687L)), 
 class = "data.frame", row.names = c("4",
 "5", "6", "7", "8", "9"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...