Листать две стороны строки - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно подготовить определенный набор данных для анализа.У меня есть таблица с именами столбцов (очевидно).Имена столбцов следующие (пример colnames):

"X99_NORM", "X101_NORM", "X76_110_T02_09747", "X30_NORM"

(это вектор, для тех, кто не знаком с функцией R colnames())

Теперь, что я хочуэто просто перевернуть значения перед и после подчеркивания.например, X99_NORM становится NORM_X99.Обратите внимание, что я хочу это только для имен столбцов, которые содержат NORM в своем имени.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Некоторые другие базовые опции R

1)

Используйте sub для переключения начала и конца - мы можем использовать здесь группы захвата.

x <- sub(pattern = "(^X\\d+)_(NORM$)", replacement = "\\2_\\1", x = x)

Результат

x
# [1] "NORM_X99"          "NORM_X101"         "X76_110_T02_09747" "NORM_X30"

2)

Подход без регулярных выражений, который может быть более эффективным при использовании chartr, dirname иpaste.Но нам нужно сначала получить индексы столбцов, которые содержат «NORM»

idx <- grep(x = x, pattern = "NORM", fixed = TRUE)
x[idx] <- paste0("NORM_", dirname(chartr("_", "/", x[idx])))
x

data

x <- c("X99_NORM", "X101_NORM", "X76_110_T02_09747", "X30_NORM")
0 голосов
/ 25 февраля 2019

A tidyverse решение с stringr:

library(tidyverse)
library(stringr)

my_data <- tibble(column = c("X99_NORM", "X101_NORM", "X76_110_T02_09747", "X30_NORM"))

my_data %>%
filter(str_detect(column, "NORM")) %>%
mutate(column_2 = paste0("NORM", "_", str_extract(column, ".+(?=_)"))) %>%
select(column_2)

# A tibble: 3 x 1
  column_2 
  <chr>    
1 NORM_X99 
2 NORM_X101
3 NORM_X30 
0 голосов
/ 25 февраля 2019
x = c("X99_NORM", "X101_NORM", "X76_110_T02_09747", "X30_NORM")
replace(x,
        grepl("NORM", x),
        sapply(strsplit(x[grepl("NORM", x)], "_"), function(x){
            paste(rev(x), collapse = "_")
        }))
#[1] "NORM_X99"          "NORM_X101"         "X76_110_T02_09747" "NORM_X30"         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...