Опция будет 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"))