r - R - 有条件的分割字符串
问题描述
我有一个与字符串拆分相关的问题。我有大量文件,名称是这样的结构:
filenames = c("NO2_Place1_123_456789.dat", "NO2_Nice_Place_123_456789.dat", "NO2_Nice_Place_123_456789.dat", "NO2_Place2_123_456789.dat")
我需要提取 Stationnames,例如 Place1、Nice_Place1 等。它要么是“Place”和一个数字,要么是“Nice_Place”和一个数字。
我试过这个来获取“Place”的站名和一个数字,它工作得很好,但是在“Nice_Place”的情况下这并没有给我正确的名字......因为它把它当作两个词来处理。
Station = strsplit(filenames[1], "_")[[1]][2] #Works
Station = strsplit(filenames[2], "_")[[1]][2] #Doesnt work
我现在的想法是使用 if...else。因此,如果上例中的 Stationname 是“Nice”,则在字符串拆分的第三部分添加下划线。不幸的是,如果其他情况,我对这个完全陌生。
有人可以帮忙吗?
编辑:
预期输出:
Station = strsplit(filenames[1], "_")[[1]][2] #Station = Place
Station = strsplit(filenames[2], "_")[[1]][2] #Station = Nice -- not correct I want to have "Nice_Place"
所以当我得到
Station = strsplit(filenames[2], "_")[[1]][2] #Station = Nice
我想添加一个条件,如果 Station 是“Nice”,它应该添加strsplit(filenames[2], "_")[[1]][3]
一个下划线!
编辑2:
我现在找到了一种方法来获得我想要的东西:
filenames = c("NO2_Place1_123_456789.dat", "NO2_Nice_Place1_123_456789.dat", "NO2_Nice_Place2_123_456789.dat", "NO2_Place2_123_456789.dat")
Station = strsplit(filenames[2], "_")[[1]][2]
if (Station == "Nice"){
Station = paste(Station, strsplit(filenames[2], "_")[[1]][3], sep = "_")
}
解决方案
我们可以用sub
sub("^[^_]+_(.*Place\\d*).*", "\\1", filenames[2])
#[1] "Nice_Place1"
推荐阅读
- c - 是否可以使用 GDB 在整个源文件上设置断点?
- oracle - ORA-28040 使用 sql plus 客户端版本 11.1 从 SQL PLUS 连接到 oracle 12c DB 时没有匹配的身份验证协议
- javascript - 汇总,多个文件,多个文件中的相同常量名称:浏览器中的错误:未捕获的语法错误:标识符“o”已被声明
- node.js - 将 express.js 集成到现有的 vue.js/webpack 项目中
- java - 如何使用 Docusign API 获取拒绝消息
- php - 事件发生时,Webhook 不运行 php 脚本,但不返回任何错误
- javascript - 按 Enter 时触发 HTML 按钮
- python - DateTimeField 不保存时间和日期 DJANGO2.1
- azure - 来自天蓝色 PIP 的 NIC 名称
- arrays - 为什么这个带有可选值的结构什么都不返回?