如何解决如何根据名称对列表中的文件进行分组?
MCD18A1.A2001001.h15v05.061.2020097222704.hdf
MCD18A1.A2001001.h16v05.061.2020097221515.hdf
MCD18A1.A2001002.h15v05.061.2020079205554.hdf
MCD18A1.A2001002.h16v05.061.2020079205717.hdf
我想在列表中按名称(日期:A2001001 和 A2001002)对它们进行分组,如下所示:
[[MCD18A1.A2001001.h15v05.061.2020097222704.hdf,MCD18A1.A2001001.h16v05.061.2020097221515.hdf],[MCD18A1.A2001002.h15v05.061.2020079205554.hdf,MCD18A1.A2001002.h16v05.061.2020079205717.hdf]]
我使用 Python 完成此操作,但我不知道如何使用 R:
# Seperate files by date
MOdis_files_bydate = [list(i) for _,i in itertools.groupby(MOdis_files,lambda x: x.split('.')[1])]
解决方法
这是您要找的吗?
g <- sub("^[^\\.]*\\.([^\\.]+)\\..*$","\\1",s)
split(s,g)
#$A2001001
#[1] "MCD18A1.A2001001.h15v05.061.2020097222704.hdf"
#[2] "MCD18A1.A2001001.h16v05.061.2020097221515.hdf"
#
#$A2001002
#[1] "MCD18A1.A2001002.h15v05.061.2020079205554.hdf"
#[2] "MCD18A1.A2001002.h16v05.061.2020079205717.hdf"
正则表达式解释
正则表达式分为三个部分。
-
^[^\\.]*\\.
-
^
第一个抑扬符标记字符串的开始; -
^[^\\.]
开头,一个类否定一个点(第二个^
)。点是元字符,因此必须转义,\\.
; - 开头没有点的序列重复了零次或多次 (
*
); - 上一个序列以点
\\.
结尾。
-
-
([^\\.]+)
是一个捕获组。-
[^\\.]
没有点的类,如上; -
[^\\.]+
至少重复了一次 (+
)。
-
-
\\..*$"
-
\\.
以一个点开头 -
\\..*$
任何字符重复零次或多次直到结束 ($
)。
-
sub
替换的是捕获组,括号之间的内容本身就是 \\1
。这会丢弃其他所有内容。
数据
s <- "
MCD18A1.A2001001.h15v05.061.2020097222704.hdf
MCD18A1.A2001001.h16v05.061.2020097221515.hdf
MCD18A1.A2001002.h15v05.061.2020079205554.hdf
MCD18A1.A2001002.h16v05.061.2020079205717.hdf"
s <- scan(text = s,what = character())
,
您希望如何组织结果?
这是一个解决方案:
files <- c("MCD18A1.A2001001.h15v05.061.2020097222704.hdf","MCD18A1.A2001001.h16v05.061.2020097221515.hdf","MCD18A1.A2001002.h15v05.061.2020079205554.hdf","MCD18A1.A2001002.h16v05.061.2020079205717.hdf")
unique_date <- unique(sub("^[^\\.]*\\.([^\\.]+)\\..*$",files))
# (credit to Rui Barradas for the nice regular expression)
grouped_files <- lapply(unique_date,function(x){files[grepl(x,files)]})
names(grouped_files) <- unique_date
> grouped_files
# $A2001001
# [1] "MCD18A1.A2001001.h15v05.061.2020097222704.hdf" "MCD18A1.A2001001.h16v05.061.2020097221515.hdf"
# $A2001002
# [1] "MCD18A1.A2001002.h15v05.061.2020079205554.hdf" "MCD18A1.A2001002.h16v05.061.2020079205717.hdf"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。