转换数据帧

我需要调换一个大的数据帧,所以我使用:

df.aree <- t(df.aree)
df.aree <- as.data.frame(df.aree)

这就是我得到的:

df.aree[c(1:5),c(1:5)]
10428        10760        12148        11865
name                M231T3       M961T5       M960T6      M231T19
GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04

我的问题是需要消除的新列名(10428、10760、12148、11865) ,因为我需要使用第一行作为列名。

我尝试了 col.names()功能,但我还没有得到我需要的。

你有什么建议吗?

剪辑

谢谢你的建议! ! ! 使用它我得到:

df.aree[c(1:5),c(1:5)]
M231T3       M961T5       M960T6      M231T19
GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04
GS44.A        1.225938e+04 2.681887e+03 1.154924e+04 4.202394e+04

现在我需要在 factor 列中转换行名(GS. .) ... 。

394580 次浏览
df.aree <- as.data.frame(t(df.aree))
colnames(df.aree) <- df.aree[1, ]
df.aree <- df.aree[-1, ]
df.aree$myfactor <- factor(row.names(df.aree))

当 name 列在其中时,您最好不要转换 data.frame-所有的数值都将转换为字符串!

这里有一个把数字当数字的解决方案:

# first remember the names
n <- df.aree$name


# transpose all but the first column (name)
df.aree <- as.data.frame(t(df.aree[,-1]))
colnames(df.aree) <- n
df.aree$myfactor <- factor(row.names(df.aree))


str(df.aree) # Check the column types

您可以使用 data.table库中的 transpose函数。简单快速的解决方案将 numeric值保持为 numeric

library(data.table)


# get data
data("mtcars")


# transpose
t_mtcars <- transpose(mtcars)


# get row and colnames in order
colnames(t_mtcars) <- rownames(mtcars)
rownames(t_mtcars) <- colnames(mtcars)

充分利用 as.matrix:

# keep the first column
names <-  df.aree[,1]


# Transpose everything other than the first column
df.aree.T <- as.data.frame(as.matrix(t(df.aree[,-1])))


# Assign first column as the column names of the transposed dataframe
colnames(df.aree.T) <- names

使用 Tidyr,可以用“ pivot _ long”和“ pivot _ wide”转换数据帧。

要转换广泛使用的 mtcar 数据集,首先应该将行名转换为列(函数 Rownames_ to _ column创建一个名为“ rowname”的新列)。

library(tidyverse)


mtcars %>%
rownames_to_column() %>%
pivot_longer(!rowname, names_to = "col1", values_to = "col2") %>%
pivot_wider(names_from = "rowname", values_from = "col2")

您可以为转置矩阵指定另一个名称

df.aree1 <- t(df.aree)
df.aree1 <- as.data.frame(df.aree1)