【问题标题】:How to automatically create multiple dataframes from columns of a single dataframe?如何从单个数据框的列自动创建多个数据框?
【发布时间】:2016-03-01 18:09:54
【问题描述】:

我的数据框“测试”如下所示:

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)数据框,每个数据框都包含日期列和从 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 很陌生。 非常感谢!

【问题讨论】:

  • 我建议使用列表l &lt;- lapply(seq_along(df)[-1], function(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
  • 感谢您的建议。在寻找解决方案时,我遇到了很多类似的问题,基本上回答的人总是建议使用列表。所以我也会试试。

标签: r dataframe


【解决方案1】:

试试这个:

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])) 
 }

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 2018-03-05
  • 2018-08-22
  • 2021-12-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多