R程序:列在一列中 - >具有维度的数据框架

时间:2016-02-07 05:05:24

标签: r

我有一个包含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循环吗?如果有人可以帮助我,那将是一个伟大的。谢谢。

4 个答案:

答案 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)))