我有以下需要转置的数据框
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
为什么值会改变?
答案 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"))