2016-03-01 86 views
1

我的数据帧的“测试”看起来像这样:如何从单个数据框的列自动创建多个数据框?

Date    1   2   3 
01.01.1985   NA   NA   NA 
09.01.1985   NA   NA   NA 
17.01.1985 0.05173014 0.04578678 0.04326039 
25.01.1985   NA   NA   NA 
02.02.1985   NA   NA   NA 
10.02.1985 0.05835957 0.05499137 0.05497832 

对于从1到n(除日期列)各列我想创建1到n(在本实施例3)dataframes每个包含日期列和从1到n的另一列。例如:

 Date   3 
1 01.01.1985   NA 
2 09.01.1985   NA 
3 17.01.1985 0.04326039 
4 25.01.1985   NA 
5 02.02.1985   NA 
6 10.02.1985 0.05497832 

理想的每个数据帧的新公司将数量“n”或类似“new_frame_n”来命名。由于我的整个数据框包含超过一千行(日期)和大约50列(以1到n命名),我想找出一种方法来自动执行此操作。 我已经通过多种方式试了一下,这是我到目前为止有:

i <- 2 #start at second column 
m <- ncol(test) # assign this to length of loop 
m 

for (i in 2:m) { 
    new_frame_[[i-1]] <- subset(test, select = c(Date, i)) 
    i <- i+1 
} 

我遇到这个How to create multiple data frames from a huge data frame using a loop? [closed],试图将其应用到我的数据,但它没有工作,所以我想一个循环会起作用。我对r很新。 非常感谢!

+0

我建议使用一个列表'升< - lapply(seq_along(DF)[ - 1],函数(x)的DF [,C(1,x)]的)'如果你必须把它们作为单独的对象,你可以命名列表元素,在这里我将它们命名为new_frame_1,_2,_3,然后做'list2env(setNames(l,paste0('new_frame_',seq_along(l))),envir = .GlobalEnv)'现在你有三个新的数据框对象,new_frame_1,new_frame_2,new_frame_3,在你的工作空间 – rawr

+0

感谢您的建议。在寻找解决方案时,我遇到了很多类似的问题,基本上那些回答问题的人总是建议使用一个列表。所以我也会尝试。 –

回答

2

尝试这种情况:

df <- read.table(textConnection(" 
Date    1   2   3 
01.01.1985   NA   NA   NA 
09.01.1985   NA   NA   NA 
17.01.1985 0.05173014 0.04578678 0.04326039 
25.01.1985   NA   NA   NA 
02.02.1985   NA   NA   NA 
10.02.1985 0.05835957 0.05499137 0.05497832") ,header=TRUE) 

for (i in 1:ncol(df[-1])) { 
assign(paste0("new_frame", i), cbind(df[1], df[-1][i])) 
} 
+0

谢谢,这正是我一直在寻找的。 –

相关问题