我在R中有一个数据框,我希望将其转换为不同的格式,请参阅下面的示例:我可以在R中使用转置函数吗?
输入数据框:
Samples A1 A2 A3 B1 B2 B3
Sample1 123 123 321 32 321 32132
Sample2 12321 32321 2321 2313 3213 3123
Sample3 454 54 543 543 43 435
期望的输出:
Samples 1 2 3
Sample1 A 123 123 321
Sample1 B 32 321 32132
Sample2 A 12321 32321 2321
Sample2 B 2313 3213 3123
Sample3 A 454 54 543
Sample3 B 543 43 435
答案 0 :(得分:5)
如果d
是数据集
使用dplyr
library(dplyr)
library(tidyr)
library(stringr)
d%>%
gather(Var, Val,A1:B3) %>%
mutate(VarN= str_extract(Var,"[A-Z]+"), indx= str_extract(Var, "\\d+")) %>%
select(-Var) %>%
spread(indx, Val)
# Samples VarN 1 2 3
#1 Sample1 A 123 123 321
#2 Sample1 B 32 321 32132
#3 Sample2 A 12321 32321 2321
#4 Sample2 B 2313 3213 3123
#5 Sample3 A 454 54 543
#6 Sample3 B 543 43 435
答案 1 :(得分:4)
要给基础R提供一些道具,请查看reshape()
函数。假设您的data.frame
被称为“mydf”,请尝试:
reshape(mydf, direction = "long",
idvar="Samples", varying=2:ncol(mydf),
v.names=c("1", "2", "3"), times = c("A", "B"))
Samples time 1 2 3
Sample1.A Sample1 A 123 123 321
Sample2.A Sample2 A 12321 32321 2321
Sample3.A Sample3 A 454 54 543
Sample1.B Sample1 B 32 321 32132
Sample2.B Sample2 B 2313 3213 3123
Sample3.B Sample3 B 543 43 435
答案 2 :(得分:2)
我认为您正在寻找包reshape2
。它有两个功能melt
和dcast
,可以帮助您完成您想要的任务。
d <- melt(d, id.vars = "Samples")
d$type <- 0
for (i in 1:3) d$type[grep(i, d$variable)] <- i
d$variable <- substr(d$variable, 1, 1)
d <- dcast(d, Samples + variable ~ type)
答案 3 :(得分:0)
我认为您可以使用t()
函数对矩阵进行转置。