【问题标题】:How to create a new dataframe for each iteration in R for loop?如何为 R for 循环中的每次迭代创建一个新的数据框?
【发布时间】:2020-08-31 20:29:46
【问题描述】:

我正在尝试根据 R 中 for 循环的每次迭代的结果创建一个新的数据框。我有一个“weekly_df”,它具有多个列的每周值。我想创建一个新的数据框,其中包含每列的值(基于迭代次数)以及日期列(年和周,它们始终是最后两列)。

目前,我有以下数据列(每行都有数值)...

A1 分数、A1 容量、A2 分数、A2 容量、A3 分数、A3 容量、年、周

所以基本上我想为每一列创建一个新的数据框,直到“年”...

A1 分数、年、周

A1 卷、年、周

等等等等第四个,但我不确定如何循环我的数据来为每一个创建一个新的数据框。我目前有以下...

for (i in 1:(length(names(weekly_df)) -2)) {
print(weekly_df[,c(i,((length(names(weekly_df))) -1), (length(names(weekly_df))))]) }

这将为我想要的每个数据帧打印正确的“tibble”,但我不确定如何将它们转换为我的环境中保存的数据帧以供以后使用。

这是一个可重现的数据集:

A1 分数、A1 容量、A2 分数、A2 容量、A3 分数、A3 容量、年、周

1, 2, 3, 4, 5, 6, 2016, 1

7、8、9、10、11、12、2016、2

13、14、15、16、17、18、2016、3

在我的环境中,我想要的输出是以下每个数据框:

A1 分数、年、周

2016 年 1 月 1 日

2016 年 7 月 2 日

2016 年 13 月 3 日

A1 卷、年、周

2016 年 2 月 1 日

2016 年 8 月 2 日

2016 年 14 月 3 日

A2 分数、年、周

2016 年 3 月 1 日

2016 年 9 月 2 日

2016 年 15 月 3 日

...某某第四,从每一列创建一个数据框。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。在 R 中创建一堆不同的 data.frame 变量可能很难使用。创建一个 data.frames 列表可能会更好。它们更容易创建和使用。
  • 我已经包含了一个可重现的数据集和我想要的输出。

标签: r dataframe for-loop rstudio


【解决方案1】:

你可以使用:

n <- ncol(weekly_df)
list_df <- lapply(names(weekly_df)[-c(n-1, n)], function(x) 
               cbind(weekly_df[x], weekly_df[c(n-1, n)]))

这将返回一个数据框列表,通常最好将数据保存在列表中,因为它更易于管理并避免在全局环境中创建大量变量,但如果您希望它们作为单独的数据框,您可以命名列表并使用list2env

list_df <- paste0('data', seq_along(list_df))
list2env(list_df, .GlobalEnv)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多