无法找到解决我问题的方法。
我有一个.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...
我的问题:循环从所有41行的最后一个.txt文件中填充正确的日期。所以都一样。
非常感谢您的提前帮助!
答案 0 :(得分:0)
尝试这样的事情:
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 <-substr(df $ files,6,7)
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