Разбор имен файлов с помощью strsplit с переменным числом #s - PullRequest
0 голосов
/ 07 июня 2018

Это одна из проблем, в которой я застрял - и разочарован, потому что должен быть другой путь:

Я пытаюсь добиться того, чтобы разобрать множество путей / имен файлов в R.имена выглядят так:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
name2 <- "alpha123#181225235959#Tag/alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

Я хочу удалить бит до первого / и иметь одну строку, соответствующую материалу после / и до первого #, а другойк вещам после первого #, включая любые последующие # с.

Вот что я делаю на первом шаге (до /):

splitname1 <- strsplit(name1, "/")
splitname1
[[1]]
[1] "alpha234#181225235959"        "alpha234#181225235959_pic_4_1-8_9_19_90.dat"

и аналогичнодля name2:

splitname2 <- strsplit(name2, "/")
splitname2
[[1]]
[1] "alpha123#181225235959#Tag"    "alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

Здесь возникает проблема.Я использую strsplit, чтобы разобраться с «хвостом» из вышеприведенного шага:

strsplit(splitname1[[1]][2], "#")
[[1]]
[1] "alpha234"                           "181225235959_pic_4_1-8_9_19_90.dat"

strsplit(splitname2[[1]][2], "#")
[[1]]
[1] "alpha123"                  "181225235959"              "Tag_pic_4_1-8_9_19_90.dat"

, тогда я получаю либо две строки, либо одну.Никакому количеству paste и тому, что я рассмотрел, не удалось объединить две строки таким образом, чтобы можно было обрабатывать два случая (где это необходимо или нет).

Должен быть лучший способ.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я не уверен на 100%, как вы хотите, чтобы ваш вывод выглядел, но я думаю, что paste с опцией collapse = '#' должно помочь:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
name2 <- "alpha123#181225235959#Tag/alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

name_list <- list(name1, name2)

lapply(name_list, function(x) {
  tmp <- strsplit(strsplit(x, "/")[[1]][2], "#")[[1]]
  c(tmp[1], paste(tmp[-1], collapse = "#"))
})
# [[1]]
# [1] "alpha234"                           "181225235959_pic_4_1-8_9_19_90.dat"
# 
# [[2]]
# [1] "alpha123"                               "181225235959#Tag_pic_4_1-8_9_19_90.dat"
0 голосов
/ 07 июня 2018

Использование sub - это один из вариантов здесь:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
sub("^.*?/(.*?)#.*$", "\\1", name1)
sub("^.*?/.*?#(.*)$", "\\1", name1)

[1] "alpha234"
[1] "181225235959_pic_4_1-8_9_19_90.dat"

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...