【发布时间】: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 <- 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 -
感谢您的建议。在寻找解决方案时,我遇到了很多类似的问题,基本上回答的人总是建议使用列表。所以我也会试试。