【发布时间】:2021-06-26 07:46:25
【问题描述】:
我有一个包含 100 个文本文件的列表,其中包含属于英国每个站点的温度值。但是,除了手动操作之外,我无法在循环中区分它们。
我希望它们被关键字检测到,然后通过选择的名称来属性列向量,例如:
EUROPEAN CLIMATE ASSESSMENT & DATASET (ECA&D), file created on 25-06-2021
THESE DATA CAN BE USED FREELY PROVIDED THAT THE FOLLOWING SOURCE IS ACKNOWLEDGED:
Klein Tank, A.M.G. and Coauthors, 2002. Daily dataset of 20th-century surface
air temperature and precipitation series for the European Climate Assessment.
Int. J. of Climatol., 22, 1441-1453.
Data and metadata available at http://www.ecad.eu
FILE FORMAT (MISSING VALUE CODE IS -9999):
01-06 SOUID: Source identifier
08-15 DATE : Date YYYYMMDD
17-21 TX : maximum temperature in 0.1 °C
23-27 Q_TX : Quality code for TX (0='valid'; 1='suspect'; 9='missing')
This is the blended series of station UNITED KINGDOM, ARMAGH (STAID: 271).
Blended and updated with sources: 100918 146805
See file sources.txt and stations.txt for more info.
SOUID, DATE, TX, Q_TX
146805,18440101, 19, 0
146805,18440102, -2, 0
146805,18440103, 67, 0
146805,18440104, 111, 0
146805,18440105, 117, 0
146805,18440106, 89, 0
146805,18440107, 61, 0
146805,18440108, 69, 0
#Expected:
SOUID, DATE, TX, Q_TX Station
146805,18440101, 19, 0 ARMAGH
146805,18440102, -2, 0 ARMAGH
146805,18440103, 67, 0 ARMAGH
146805,18440104, 111, 0 ARMAGH
146805,18440105, 117, 0 ARMAGH
146805,18440106, 89, 0 ARMAGH
146805,18440107, 61, 0 ARMAGH
146805,18440108, 69, 0 ARMAGH
我可以使用以下方法选择文件列表:
files <- list.files(pattern = ".txt", full.names=TRUE)
all.txt <- lapply(files, data.table::fread)
但是,fread 删除了标题,所以我无法确定它们属于哪个站。
如果我有一个可用的站名列表并且可以匹配它们,我如何根据文本中的站创建一个新列?
更新:
我已设法将文本文件读入read_table,然后提取Kingdom 之后的电台名称,但是那些带有空格的名称,只有第一个单词被选中。鉴于电台名称位于 United Kingdom 之后的行尾,则选择 KINGDOM 之后的其余单词即可。
这是我目前尝试过的:
stringr::str_extract(xp1$xp, '(?<=KINGDOM\\s)\\w+')
如果我有例如,这会失败Cex et England,我只得到Cex
【问题讨论】:
-
你的意思是txt文件的内容类似于
This is only an example of the header to each text file blah blah blah Bu this station is called ARMAGH SOUID, DATE, TX, Q_TX 146805,18440101, 19, 0 146805,18440102, -2, 0 ……?我猜你可以用正则表达式提取关键字。 -
@PeaceWang 正则表达式一直是我的弱点,但现在是提高我技能的好时机
-
如果你的文件在实际数据之前有这么多文本,
fread会报错吗? -
@RonakShah
fread只是截断了内容,留下了数据,所以这绝对不是最好的选择。我正在尝试使用read_table将文本文件捕获到一列中,并找出一些正则表达式(这是我的弱点)来提取UNITED KINGDOM之后的电台名称,将其存储为向量,因为现在向量电台名称相对于列表按顺序排列,删除内容,然后将数据拆分到各自的列中,并使用cbind之类的名称添加新名称。这种方法对我来说有点牵强,而且实现起来相当长。