2015-09-26 85 views
1

请原谅我是这个论坛的新手。我有很多列的大数据框,例如:df(Timestamp, A, B, C, D, E, F, G)。该研究需要单独的数据帧,其列是从主数据帧(df)中提取的。 df1(Timestamp, A),df2(Timestamp, B),df3(Timestamp, C)等。有人可以帮助创建这些data.frames即。 df1,df2,df3等。如果列由某个数字而不是名称索引,将会很好,因为某些data.frames是从xts对象生成的。样本数据:从大型数据中制作小型数据帧。

Timestamp    qs   pqs  logqs  es   p_imp   dep   r_dep 
01-04-2015 09:30:00 2.389130435 0.001441341 0.001441375 2.97826087 -0.431832298 66.50621118 110181.2601 
01-04-2015 10:00:00 1.144315245 0.000694098 0.000694098 1.537338501 -0.315794574 24.88113695 40978.64755 
01-04-2015 10:30:00 1.007904412 0.000608322 0.000608322 1.444485294 0.714613971  19.82169118 32870.0591 
01-04-2015 11:00:00 1.044117647 0.000630179 0.000630179 1.425086505 -0.058088235 28.92387543 47932.57617 
+0

如果您输入数据集的前几列中的几行以确保它与您正在使用的对象的类型一致,那将会更好。 – A5C1D2H2I1M1N2O1R2T1

+0

请使用'dput'。正如在dput(head(yourdataset,4))中那样。 – A5C1D2H2I1M1N2O1R2T1

回答

3

你可以做这样的事情:

df <- data.frame(timestamp = 1:2, A = 3:4, B = 5:6, C = 7:8) 

lapply(2:ncol(df), function(x) df[, c(1, x)]) 

这将产生更小的data.frame是你们等是后的list

如果你真的想在您的工作区分开的对象,你就需要尝试类似:

list2env(
    setNames(
    lapply(2:ncol(df), function(x) df[, c(1, x)]), 
    paste0("df", 1:(ncol(df)-1))), 
    .GlobalEnv) 

(但似乎真的很乱我有工作区中的这么多不同的对象)list2env需求名称,这就是为什么我们首先使用setNames将它们添加到拆分data.frame s的列表中。

编辑:更改代码从df[c(1, x)]df[, c(1, x)]因为您正在使用xts对象而不是data.frame s。