我希望拆分并重新组合矩阵。目的是将每行分成两行,将第一行中某些列的数据和其他列中的数据放入第二行。
举个例子:
原始矩阵如下所示:
Col1 Col2 Col3 Col4 ABL 100 200 300 BGA 400 500 600 APN 700 800 900
我希望新矩阵看起来像这样:
Col1 Col2 Col4 ABL1 100 300 ABL2 200 300 BGA1 400 600 BGA2 500 600 APN1 700 900 APN2 800 900
在每种情况下,我将每行分成两行,第一行包含Col2的值,第二行包含Col3的值,两者都包含Col4的值。
任何帮助都会非常感激,因为我很困惑。
谢谢!
麦克
答案 0 :(得分:1)
这样的事情可能有所帮助:
DF <- read.table(text = "
Col1 Col2 Col3 Col4
ABL 100 200 300
BGA 400 500 600
APN 700 800 900 ", header = T)
newDF <- cbind(as.character(DF$Col1), c(DF$Col2, DF$Col3), DF$Col4)
newDF <- as.data.frame(newDF[order(newDF[,1]),])
newDF$V1 <- paste(newDF$V1, 1:2, sep = "")
> newDF
V1 V2 V3
1 ABL1 100 300
2 ABL2 200 300
3 APN1 700 900
4 APN2 800 900
5 BGA1 400 600
6 BGA2 500 600
但是,第一列的排序与您的数据不完全相同。
答案 1 :(得分:0)
你可以做一个循环,但我相信有更好的答案。 如果你在my.data中获得了数据
my.out.data<-data.frame()
for (k in 1:nrow(my.data){
assign(paste(c(row.names(my.data)[k],"1"), collapse=""),my.data[[k,c(1,3)]]) #Creates the first row of data
assign(paste(c(row.names[k],"2"), collapse=""), my.data[[k,c(2,3)]]) #Creates the second row of data
my.out.data<-rbind(get(paste(c(row.names[k],"1"), collapse="")),get(paste(c(row.names[k],"2"), collapse=""))) #Gets the rows inside the data
}
我没有检查它,所以它可能包含一些错误,但我希望它会有所帮助。
答案 2 :(得分:0)
这是@ alexis_laz解决方案的变体:
out <- rbind(setNames(DF[,c(1,2,4)],c('Col1','Col2','Col4')),
setNames(DF[,c(1,3,4)],c('Col1','Col2','Col4')))
out <- out[order(out$Col1),]
out$Col1 <- paste(out$Col1,1:2,sep='')
> out
Col1 Col2 Col4
1 ABL1 100 300
4 ABL2 200 300
3 APN1 700 900
6 APN2 800 900
2 BGA1 400 600
5 BGA2 500 600