【问题标题】:for loop to create data frames which are subsets of another data framefor循环创建作为另一个数据帧子集的数据帧
【发布时间】:2020-05-01 04:25:04
【问题描述】:

我正在尝试创建一个用于创建原始数据子集的 for 循环

现在我创建子集如下:

Dataset_1 <- subset(Dataset1, compliance>=0)    
Dataset_2 <- subset(Dataset1, compliance>=5) 
Dataset_3 <- subset(Dataset1, compliance>=10)
Dataset_4 <- subset(Dataset1, compliance>=15)
Dataset_5 <- subset(Dataset1, compliance>=20)
Dataset_6 <- subset(Dataset1, compliance>=25)

但是,我想使用 for 循环来执行此操作,并且认为这样的事情可能会起作用:

Dataset_ = {}
for (i in 1:6){
  Dataset_[[i]] = subset(Dataset1, compliance>=(0+(i-1)*5))
}

当我这样做时,我会得到一个包含数据框的列表。但是,我想知道是否有办法编写 for 循环,以便数据帧不放在列表中,而是作为单独的数据帧。原因:我想将创建为 .Rdata 文件的数据框保存在文件夹中,例如:

save(Dataset_2, file = "Hypothesis1/Dataset1.RData")
save(Dataset_3, file = "Hypothesis1/Dataset2.RData")
save(Dataset_4, file = "Hypothesis1/Dataset3.RData")

【问题讨论】:

  • 试试assign(paste0("Dataset_",i), subset(Dataset1, compliance&gt;=(0+(i-1)*5))) 而不是你的Dataset_[[i]] = subset(Dataset1, compliance&gt;=(0+(i-1)*5))
  • 或者只是for (i in 1:6){ save(subset(Dataset1, compliance&gt;=(0+(i-1)*5)), file = sprintf("Hypothesis1/Dataset%s.RData", i)) }
  • 尝试 assign(paste0("Dataset_",i), subset(Dataset1, compliance>=(0+(i-1)*5))) 代替您的 Dataset_[[i]] = subset(Dataset1, compliance>=(0+(i-1)*5)) 这行得通,非常感谢:)
  • @ulfelder 请发帖回答。
  • @Jeroen 请发布您的答案。

标签: r dataframe for-loop subset


【解决方案1】:

您无需创建列表。您可以在 for 循环中将文件直接写入磁盘,如下所示:

for (i in seq(6)) {

  save(subset(Dataset1, compliance >= (0 + (i-1) * 5)),
       file = sprintf("Hypothesis1/Dataset%s.RData", i))

}

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2022-08-06
    • 2021-04-26
    • 2023-03-19
    相关资源
    最近更新 更多