【问题标题】:Is there an easy way to simplify this code using a loop?有没有一种简单的方法可以使用循环来简化此代码?
【发布时间】:2020-05-28 01:24:58
【问题描述】:

有没有办法使用循环来简化这段代码?

set.seed(100) 

AL_INDEX <- sample(1:nrow(AL_DF), 0.7*nrow(AL_DF))
AL_TRAIN <- AL_DF[AL_INDEX,]
AL_TEST <- AL_DF[-AL_INDEX,]  

AR_INDEX <- sample(1:nrow(AR_DF), 0.7*nrow(AR_DF))
AR_TRAIN <- AR_DF[AR_INDEX,]
AR_TEST <- AR_DF[-AR_INDEX,]  

AZ_INDEX <- sample(1:nrow(AZ_DF), 0.7*nrow(AZ_DF))
AZ_TRAIN <- AZ_DF[AZ_INDEX,]
AZ_TEST <- AZ_DF[-AZ_INDEX,]  

AL_DF、AR_DF 和 AZ_DF 是具有相同字段结构但记录数不同的数据帧。

【问题讨论】:

  • 您是否希望将所有这些作为单独的数据框,或者您可以将它们保存在一个列表中?
  • 我希望它们位于自己的数据框中,因为稍后将在模型中调用它们。

标签: r loops dataframe for-loop


【解决方案1】:

找到一个模式来捕获所有数据框名称。在共享的示例中,它们都以"_DF" 结尾,使用mget 将它们放入列表中。将测试和训练中的数据划分为unlist他们一级。

data <- unlist(lapply(mget(ls(pattern = '_DF$')), function(df) {
            index <- sample(1:nrow(df), 0.7*nrow(df))
            list(train = df[index,], test = df[-index,])  
         }), recursive = FALSE)

现在使用 list2env 将它们放入单独的数据帧中。

list2env(data, .GlobalEnv)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 2022-11-10
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2010-09-12
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多