разделение строки и замена позиции строки в R

#r

#r

Вопрос:

У меня есть вектор с именем myvec. Я хотел бы разделить ее на _ и поменять местами позицию. Каков был бы самый простой способ сделать это?

myvec <- c("08AD09144_NACC022453", "08AD8245_NACC657970")

Результат, который я хочу:

NACC022453_08AD09144, NACC657970_08AD8245

Ответ №1:

Вы можете сделать это с помощью регулярных выражений, собирающих данные в две группы и обменивающих их с помощью обратной ссылки.

 myvec <- c("A1_B1", "B2_C1", "D1_A2")

sub('(\w )_(\w )', '\2_\1', myvec)
#[1] "B1_A1" "C1_B2" "A2_D1"
  

Комментарии:

1. В моих фактических данных это происходит c("NACC022453_08AD09144", "08AD8245_NACC657970") . Как мне удалить «?

2. @New_to_R Обновите свой пост с вашими фактическими данными и фактическим ожидаемым результатом. Может быть, вам нужно sub('"(\w )_(\w )"', '\2_\1', myvec) ?

3. Мой первоначальный ответ по-прежнему работает для вашего обновленного вопроса. sub('(\w )_(\w )', '\2_\1', myvec) возвращает #[1] "NACC022453_08AD09144" "NACC657970_08AD8245" то же, что и ожидаемый результат. Что вы получаете?

4. Я получаю c("NACC022453_08AD09144", "08AD8245_NACC657970") . Это то, что я сделал sub('(\w )_(\w )', '\2_\1', covarAA_ADC1_2[2])

5. Попробуйте использовать двойные скобки. covarAA_ADC1_2[[2]]

Ответ №2:

Мы можем использовать strsplit из base R

 sapply(strsplit(myvec, "_"), function(x) paste(x[2], x[1], sep = "_"))
#[1] "NACC022453_08AD09144" "NACC657970_08AD8245"