【问题标题】:Making small data.frames from a large data.frame从大数据框架制作小数据框架
【发布时间】:2015-12-24 02:28:04
【问题描述】:

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

【问题讨论】:

  • 最好dput 数据集前几列的几行,以确保它适用于您正在使用的对象类型。
  • 请使用dput。如dput(head(yourdataset, 4))

标签: r dataframe


【解决方案1】:

你可以这样做:

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,其中包含您所追求的较小的data.frame

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

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

(但是在你的工作空间中有这么多单独的对象对我来说似乎真的很混乱。)list2env 需要名称,这就是为什么我们首先使用setNames 将它们添加到拆分data.frames 列表中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多