首页 > 解决方案 > 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 = "_")
}

标签: rstringif-statementsplitconditional-statements

解决方案


我们可以用sub

sub("^[^_]+_(.*Place\\d*).*", "\\1", filenames[2])
#[1] "Nice_Place1"  

推荐阅读