R中的转置函数会意外更改值

时间:2019-05-14 19:23:08

标签: r

我有以下需要转置的数据框

                      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 个答案:

答案 0 :(得分:1)

从行名创建一列后,可以选择将gather的'A','B'列转换为'long'格式,然后将spread转换为'wide'格式并更改'键”列到行名

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"))