有没有人知道可以执行以下操作的包/功能:
假设我有一个数据框:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
我想将其转换为:
1 2 3 4 5 6 7 8 9 10 11 12
5 6 7 8 9 10 11 12 13 14 15 16
由于
答案 0 :(得分:1)
base
包中有一些很好的功能可以帮助你完成这项工作。
> d <- read.table(header = FALSE, text = "1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16")
> d
## V1 V2 V3 V4
## 1 1 2 3 4
## 2 5 6 7 8
## 3 9 10 11 12
## 4 13 14 15 16
> do.call(rbind, lapply(seq(nrow(d)-1, nrow(d)), function(i){
cbind(d[i-2,], d[i-1,], d[i,])
}))
## V1 V2 V3 V4 V1 V2 V3 V4 V1 V2 V3 V4
## 1 1 2 3 4 5 6 7 8 9 10 11 12
## 2 5 6 7 8 9 10 11 12 13 14 15 16
ADD
更一般地说,我们可以获取三个连续行的子集,并将它们与以下内容绑定在一起。假设原始数据为x
> seqs <- lapply(seq(nrow(x)-2), function(i) seq(i, i+2))
> XX <- lapply(seq(seqs), function(i) x[seqs[[i]],])
> data.frame(t(sapply(XX, t)))
答案 1 :(得分:0)
不确定这是否正是您正在寻找的,但可能更简单的方法:
# Recreate the matrix
data=t(matrix(1:16,ncol=4))
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 4
# [2,] 5 6 7 8
# [3,] 9 10 11 12
# [4,] 13 14 15 16
# Transform the matrix
newdata=matrix(t(data), nrow=2, byrow=T)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] 1 2 3 4 5 6 7 8
# [2,] 9 10 11 12 13 14 15 16
这并没有返回你给出的确切转换,但也许它是一个更简单的起点。你能描述一下你更明确地寻找的模式吗?这可能有助于将该方法推广到任何 m x n 矩阵。