将多个 csv 中的特定行合并到嵌套文件夹中并转置为时间序列

问题描述 投票:0回答:1

我的目标是从嵌套子文件夹中的多个 csv (409) 导入特定行。每个 csv 对应于特定月份测量的降雨量。在每个 csv 中,行对应于特定位置的雨量站。每日降雨量显示在下图最右侧的栏中。由于月份的长度不同,因此每个 csv 文件中的列数各不相同。 example csv of raw data

对于给定的雨量计,我想提取适当的数据行并转换为具有每日时间戳和雨量的新 df (站点 ID、纬度、经度和海拔也可以转换,但不能转换)在这一点上同样重要)。目标是为每个感兴趣的雨量计创建一个 df,如下所示:objective of data import and transformation

预先感谢您的想法!

以下没有达到我想要的效果:

dir("station_data", full.names = T) %>%

df<- map_df(read_csv)bind_rows(lapply(csv_files, read_csv))

csv import directory nested
1个回答
0
投票

如果您有这两个 csv 文件,为期两个月

id,2006.08.01,2006.08.02,2006.08.03
U1,5.69,12.36,8.21
U2,4.69,12.56,9.21
U3,4.69,1.36,82.21
id,2006.09.01,2006.09.02,2006.09.03
U1,3.69,17.36,8.21
U2,4.69,16.56,2.21
U3,3.69,10.36,182.21

您可以使用这个Miller命令

mlr --csv filter '$id=="U1"' then reshape -r '[0-9]{4}' -o d,v 01.csv 02.csv

获得

id d v
U1 2006.08.01 5.69
U1 2006.08.02 12.36
U1 2006.08.03 8.21
U1 2006.09.01 3.69
U1 2006.09.02 17.36
U1 2006.09.03 8.21

一些注意事项:

  • filter '$id=="U1"'
    过滤雨量计“U1”
  • reshape -r '[0-9]{4}' -o d,v
    将所有包含 4 个数字的字段从宽变为长。
    -o d,v
    设置输出字段名称
© www.soinside.com 2019 - 2024. All rights reserved.