【问题标题】:How to use LOOP to simplify this R script code. It is a code for analysing a yearly data如何使用 LOOP 来简化这个 R 脚本代码。这是用于分析年度数据的代码
【发布时间】:2021-09-09 18:18:57
【问题描述】:

我正在分析一个年度数据集。我想重塑和重命名数据。如何使用 LOOP 来简化以下代码?

marryc2010 <- data.frame(date=c2010$Date,EC=c2010$`Elemental Carbon by transmittance-PM10`,OC=c2010$`Organic Carbon by transmittance-PM10`)
marryc2011 <- data.frame(date=c2011$Date,EC=c2011$`Elemental Carbon by transmittance-PM10`,OC=c2011$`Organic Carbon by transmittance-PM10`)
marryc2012 <- data.frame(date=c2012$Date,EC=c2012$`Elemental Carbon by transmittance-PM10`,OC=c2012$`Organic Carbon by transmittance-PM10`)
marryc2013 <- data.frame(date=c2013$Date,EC=c2013$`Elemental Carbon by transmittance-PM10`,OC=c2013$`Organic Carbon by transmittance-PM10`)
marryc2014 <- data.frame(date=c2014$Date,EC=c2014$`Elemental Carbon by transmittance-PM10`,OC=c2014$`Organic Carbon by transmittance-PM10`)
marryc2015 <- data.frame(date=c2015$Date,EC=c2015$`Elemental Carbon by transmittance-PM10`,OC=c2015$`Organic Carbon by transmittance-PM10`)
marryc2016 <- data.frame(date=c2016$Date,EC=c2016$`Elemental Carbon by transmittance-PM10`,OC=c2016$`Organic Carbon by transmittance-PM10`)
marryc2017 <- data.frame(date=c2017$Date,EC=c2017$`Elemental Carbon by transmittance-PM10`,OC=c2017$`Organic Carbon by transmittance-PM10`)
marryc2018 <- data.frame(date=c2018$Date,EC=c2018$`Elemental Carbon by transmittance-PM10`,OC=c2018$`Organic Carbon by transmittance-PM10`)
marryc2019 <- data.frame(date=c2019$Date,EC=c2019$`Elemental Carbon by transmittance-PM10`,OC=c2019$`Organic Carbon by transmittance-PM10`)

【问题讨论】:

标签: r rscript


【解决方案1】:

一种简单的方法是在您的数据框列表上使用purrr::map

library(purrr)
library(dplyr)

# Create a list of the dataframes, and return values as object names.
df.list <- mget(paste0("c", 2010:2019))

# Then, use map to extract the columns that you need from each dataframe.
dfs.updated <-
  purrr::map(
    .x = df.list,
    .f = function(x) {
      x %>% dplyr::select(
        Date,
        `Elemental Carbon by transmittance-PM10`,
        `Organic Carbon by transmittance-PM10`
      )
    }
  )

# Then, can rename if needed.
names(dfs.updated) <- paste0("marry", 2010:2019)

【讨论】:

    【解决方案2】:

    您不应创建 10 个单独的数据框。您应该在列表中创建它们,以便以后可以使用 lapply 在捆绑中使用它们。

    input_list <- mget( paste0('c', 2010:2019)  # Now inputs are in one list 
    marry_list <- lapply( input_list, function(x) { 
                                    data.frame(date=x$Date,
                                       EC=x$`Elemental Carbon by transmittance-PM10`,
                                       OC=x$`Organic Carbon by transmittance-PM10`)}
    names(marry_list) <- paste0("marry", 2010:2019)
    

    当您需要其中一个时,它很简单:

     df_val <- marry_list[['marry2015']]
    

    或者

     df_val <- marry_list$marry2015
    

    如果您只想要其中一个的日期列,那么可以是以下任何一个:

     marry_list$marry2019$date  # both `$` and `[[` can be chained
     marry_list[['marry2019']][['date']]  # use `[[` inside function, `$` at console
    

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2021-01-09
      • 2011-01-29
      • 2012-03-08
      相关资源
      最近更新 更多