【问题标题】:for loop for different datasets in RR中不同数据集的for循环
【发布时间】:2020-11-04 19:31:20
【问题描述】:

你可以下载下面的数据集,这些数据集有共同的 colnames Long/Lat

downloadGithubData <- function() {
  download.file(
    url      = "https://github.com/CSSEGISandData/COVID-19/archive/master.zip",
    destfile = "data/covid19_data.zip"
  )
  
  data_path <- "COVID-19-master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_"
  unzip(
    zipfile   = "data/covid19_data.zip",
    files     = paste0(data_path, c("confirmed_global.csv", "deaths_global.csv", "recovered_global.csv", "confirmed_US.csv", "deaths_US.csv")),
    exdir     = "data",
    junkpaths = T
  )
}


updateData <- function() {
  # Download data from Johns Hopkins (https://github.com/CSSEGISandData/COVID-19) if the data is older than 0.5h
  if (!dir_exists("data")) {
    dir.create('data')
    downloadGithubData()
  } else if ((!file.exists("data/covid19_data.zip")) || (as.double(Sys.time() - file_info("data/covid19_data.zip")$change_time, units = "hours") > 0.5)) {
    downloadGithubData()
  }
}

# Update with start of app
updateData()

#TODO: Still throws a warning but works for now
#DATASETS#
data_confirmed    <- read_csv("data/time_series_covid19_confirmed_global.csv")
data_deceased     <- read_csv("data/time_series_covid19_deaths_global.csv")
data_recovered    <- read_csv("data/time_series_covid19_recovered_global.csv")
data_confirmed_us <- read_csv("data/time_series_covid19_confirmed_US.csv")
data_deceased_us  <- read_csv("data/time_series_covid19_deaths_US.csv")

使用 for 循环我想将所有数据集的所有列名更改为 'longitude''latitude'

   colnames(data_confirmed)[colnames(data_confirmed) == 'Long'] <- 'longitude'
    colnames(data_confirmed)[colnames(data_confirmed) == 'Lat'] <- 'latitude'

任何帮助将不胜感激, 非常感谢,

【问题讨论】:

  • 必须是循环吗?我会将所有数据框粘贴到一个列表中,并将lapply 与匿名函数一起使用。
  • lappy 也可以
  • 应该这样做:列出所有数据帧(例如,df_list)然后new_df_list &lt;- lapply(df_list, function(x){ colnames(x)[colnames(x) == 'Long'] &lt;- 'longitude' colnames(x)[colnames(x) == 'Lat'] &lt;- 'latitude' x }) 这会在复制时有点奇怪,在第一个“{”之后放置中断, "经度" 和 "纬度" :)

标签: r function for-loop data-manipulation


【解决方案1】:

我将变量的所有名称放在一个名为 mynames 的向量中。但是,您可以通过list.files() 等来使用动态的。

mynames <- c("data_confirmed","data_deceased","data_recovered","data_confirmed_us","data_deceased_us")

for(i in mynames) {
      var <- get(i)
      colnames(var)[grepl('Long',colnames(get(i)))] <- 'longitude'
      colnames(var)[grepl('Lat',colnames(get(i)))] <- 'latitude'
      assign(i,var)

}

我使用grepl 而不是==,因为在某些数据集中存在 Long_ 而不是 Long。所以单词检测是必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2021-04-16
    • 1970-01-01
    • 2022-12-07
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多