请原谅,因为我是这个论坛的新手。我有一个包含许多列的大型数据框,例如: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
答案 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)]
。