【问题标题】:R: nested loop, extending data frame with new observationsR:嵌套循环,用新的观察扩展数据框
【发布时间】:2018-11-12 18:33:21
【问题描述】:

无法找到我的问题的解决方案。

我有一个 .txt 文件的数据集,以他们的观察时间命名,例如:2018-07-04-04-53.txt。所有这些 .txt 文件都存储在一个文件夹中。

我的目标是创建一个新的 data.frame,其中包含这些 .txt 文件中的信息。

首先我收集文件夹中文件的名称:

nam = list.files(path = "C:/Users/.../data")

然后,我创建一个包含从 1 开始的整数的向量:变量的长度

nrv = c(1:length(nam))

在此之后,我准备了我的“虚拟”data.frame,我想用以下嵌套循环填充它。 (我尝试用rbind填充data.frame,但它总是会删除珍贵填充的数据)

nrnam = length(nam)


data = data.frame("year"=c(1:nrnam), "month"=c(1:nrnam), "day"=c(1:nrnam), "hour"=c(1:nrnam), "min"=c(1:nrnam))

这背后的想法是创建一个类似于矩阵的 df,但带有一个标题(我的原始输入数据被极度压缩,因为它需要通过铱星传输)

这是我尝试使用的 for 循环,用于填写正确的观察日期..

 for (i in nam) {

  for (ii in nrv) {

  # Einlesen des Datums aus dem Namen der Datei


  yr = substr(i,1,4)
  mo = substr(i,6,7)
  da = substr(i,9,10)
  hr = substr(i,12,13)
  mn = substr(i,15,16)

  data$year[ii] = yr
  data$month[ii] = mo
  data$day[ii] = da
  data$hour[ii] = hr
  data$min [ii] = mn


  } 
}

以你们为例:“i”包含 41 个字符(2018-07-04-04-53.txt 到 2018-07-12-10-51.txt),“ii”包含 41 个文件总计,所以 nrnam 应该是整数 1:41。

我的基本想法是:

1) go to file 1 (here 2018-07-04-04-53.txt) 
2) gather the observation date from file name
3) place it at row [ii] in my df. 
4) do it for all 41 files... 

我的问题:循环从最后一个 .txt 文件中为所有 41 行填写正确的日期。所以都是一样的。

非常感谢您提前提供的帮助!

【问题讨论】:

标签: r loops nested


【解决方案1】:

试试这样的:

setwd("U:/Playground/StackO/")

df <- data.frame(files = list.files())

library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date

df$date <- ymd_hm(df$files)  
df$month <- month(df$date)

df
#>                  files                date month
#> 1 2018-07-04-04-53.txt 2018-07-04 04:53:00     7
#> 2 2018-07-06-11-51.txt 2018-07-06 11:51:00     7
#> 3 2018-07-12-10-51.txt 2018-07-12 10:51:00     7

lubridate 是一个用于操作日期的包。它大大简化了工作流程,因为您不必创建自己的函数并考虑边缘情况。

您仍然可以像这样使用您的方式: df$month2

df
#>                  files                date month month2
#> 1 2018-07-04-04-53.txt 2018-07-04 04:53:00     7     07
#> 2 2018-07-06-11-51.txt 2018-07-06 11:51:00     7     07
#> 3 2018-07-12-10-51.txt 2018-07-12 10:51:00     7     07

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2018-05-13
    • 2020-01-22
    • 1970-01-01
    • 2023-01-11
    • 2018-11-06
    相关资源
    最近更新 更多