我有一个包含3840行的数据帧(在columnA中只有一个值)。我想将其转换为数据帧(40行和96列)。我试着使用以下代码。
a1<-a[1:40,]
a2<-cbind(a1,a[41:80,])
a3<-cbind(a2,a[81:120,])
a4<-cbind(a3,a[121:160,])
a5<-cbind(a4,a[161:200,])
a6<-cbind(a5,a[201:240,])
......
a96<-cbind(a95,a[3801:3840,])
这太繁琐了。如果循环,我可以使用while循环吗?如果有人可以帮助我,那将是一个伟大的。谢谢。
答案 0 :(得分:4)
刚刚重新开始
`dim<-`(a[,1],c(40,96))
你完成了(根据需要用as.data.frame
包裹)
答案 1 :(得分:3)
我们可以使用matrix
matrix(a[,1], nrow=40, ncol=96)
答案 2 :(得分:1)
你可以像tolower()
一样这样做(注意这有一个优点,即当data.table
有两列或多列你要重塑时,它很容易扩展到处理的情况) :
a
(安装开发版本的说明,library(data.table) #1.9.7 +
setDT(a)[, ct := 1:40]
dcast(a, rowid(ct) ~ ct, value.var = "columnA")
函数,here)
测试数据:
rowid
如果你感觉很吝啬,这是一个单行版本:
set.seed(10932)
a <- data.table(columnA = rnorm(3840))
另一个(这在dcast(a, rowid(ct <<- rep_len(1:40, nrow(a))) ~ ct, value.var = "columnA")
中可行,当前CRAN版本为reshape2
):
data.table
答案 3 :(得分:1)
这是一个基本R方法:
# Fake data
dat = data.frame(v1 = rnorm(3840))
# Split into columns of 40 rows each
dat.new = as.data.frame(mapply(function(i,j) {dat[i:j,]},
which(1:nrow(dat) %% 40 == 1), which(1:nrow(dat) %% 40 == 0)))