我有一个看起来像这样的矩阵:
SNP G1 G2 G3
marker1 TT CC TT
marker2 AA AA AA
marker3 TT TT TT
我希望它看起来像这样:
SNP
>marker1 TT G1
>marker2 AA G1
>marker3 TT G1
>marker1 CC G2
>marker2 AA G2
>marker3 TT G2
>marker1 TT G3
>marker2 AA G3
>marker3 TT G3
我正在使用它:
bsp2<- read.table("C:/R/bsp2.csv", header=TRUE)
reshape(as.data.frame(bsp2), direction="long", varying = list(colnames(bsp2)
[2:6]), v.names="G", idvar="SNP")
但我收到错误消息“未定义列已选中”。 谁能告诉我我做错了什么?
答案 0 :(得分:5)
使用 reshape2 中的melt
会更容易:
dat <- read.table(text = "SNP G1 G2 G3
marker1 TT CC TT
marker2 AA AA AA
marker3 TT TT TT",header = T,sep = "")
require(reshape2)
melt(dat,id.var = "SNP")
SNP variable value
1 marker1 G1 TT
2 marker2 G1 AA
3 marker3 G1 TT
4 marker1 G2 CC
5 marker2 G2 AA
6 marker3 G2 TT
7 marker1 G3 TT
8 marker2 G3 AA
9 marker3 G3 TT
答案 1 :(得分:4)
虽然joran正确融化可能更容易,但是它在底部重塑了。
bsp2 <- read.table(text="SNP G1 G2 G3
marker1 TT CC TT
marker2 AA AA AA
marker3 TT TT TT ", header=TRUE)
bsp2.long <- reshape(bsp2, direction="long", varying = 2:4, v.names="G",
timevar="TIME", times=paste0("G", 1:3), idvar="SNP")
rownames(bsp2.long) <- seq_len(nrow(bsp2.long))
bsp2.long
哪个收益率:
SNP TIME G
1 marker1 G1 TT
2 marker2 G1 AA
3 marker3 G1 TT
4 marker1 G2 CC
5 marker2 G2 AA
6 marker3 G2 TT
7 marker1 G3 TT
8 marker2 G3 AA
9 marker3 G3 TT
请注意,您需要R 2,15才能使用paste0
。如果您没有R2.15并且不想安装它,请将该参数替换为times=c("G1", "G2", "G3")
。我所谓的TIME
也没有必要,因为R会调用它time
,但我这样做是为了表明你可以使用reshape
控制该名称。