如何在R中提取列以生成多个数据帧?

时间:2013-12-05 05:59:55

标签: r extract

我需要一个简单的任务帮助。 我有一个数据帧28x52,我想制作几个数据帧并重命名每个数据帧。所以它将变成13个28x4数据帧。我知道这可能涉及for循环,所以我尝试了:

for(i in seq(1,52,4)){
  i <- data[,i:i+3]
} 

虽然没用。

3 个答案:

答案 0 :(得分:2)

以下是3x9源data.frame的一种方法,我们希望将其子集化为3个3x3 data.frame s。

m <- data.frame(matrix(1:27, ncol = 9))
lapply(split(sequence(ncol(m)), rep(1:3, each = 3)), function(x) m[, x])
# $`1`
#   X1 X2 X3
# 1  1  4  7
# 2  2  5  8
# 3  3  6  9
# 
# $`2`
#   X4 X5 X6
# 1 10 13 16
# 2 11 14 17
# 3 12 15 18
# 
# $`3`
#   X7 X8 X9
# 1 19 22 25
# 2 20 23 26
# 3 21 24 27

创建要提取的列的序列,并创建list的{​​{1}}。

因此,应用于复制数据结构的东西,您可以使用:

data.frame

答案 1 :(得分:0)

尝试使用list。例如,快速而肮脏的方式:

N <- 28*52
BigDataFrame <- data.frame(matrix(rnorm(N), nrow=28, ncol=52))
BigList <- NULL
Count <- 0
for (i in seq(1,49,4)) {
  Count <- Count + 1
  BigList[[Count]] <- BigDataFrame[,i:(i+3)]
}

答案 2 :(得分:0)

你得到了什么错误?我很好奇。只是详细说明你可以做的答案

# simulate 100x54 data matrix
data <- rnorm(54*100)

data <- matrix(data,100,54)

data <- as.data.frame(data)

# name variables and observations
for (i in 1:54){
  colnames(data)[i]<-paste("variable_",i,sep="")
}

for (i in 1:100){
  rownames(data)[i]<-paste("observation_",i,sep="")
}

# data structure
head(data)

# data.frame separation loop
counter=0
for(i in seq(1,52,4)){

  counter = counter + 1
  name <- paste("dataframe_",counter,sep="")
  assign(name,data[,i:(i+3)])
} 

# what is the class of created objects?
class(dataframe_1)

# check out first sub-data.frame 
head(dataframe_1)

您可以在数据框中获取您的信息:dataframe_1,...,dataframe_13

我没试过,但它应该有用。