从大型data.frame中制作小型data.frames

时间:2015-09-26 10:11:18

标签: r dataframe

请原谅,因为我是这个论坛的新手。我有一个包含许多列的大型数据框,例如:df(Timestamp, A, B, C, D, E, F, G)。该研究需要单独的data.frames,其列从主data.frame(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

1 个答案:

答案 0 :(得分: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)])

这将创建您所追求的较小list的{​​{1}}。

如果您真的想在工作区中使用单独的对象,则需要尝试以下方法:

data.frame

(但在我的工作区中有这么多单独的对象,我觉得非常麻烦。)list2env( setNames( lapply(2:ncol(df), function(x) df[, c(1, x)]), paste0("df", 1:(ncol(df)-1))), .GlobalEnv) 需要名称,这就是我们首先使用{将它们添加到split list2env列表中的原因。 {1}}。

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