R изменить имена столбцов, сохранить часть имен столбцов

#r

#r

Вопрос:

У меня есть df с именами столбцов таким образом:

 Resampled.Band.1..raster.bsq...404.502014.Nanometers.
...
Resampled.Band.74..raster.bsq...950.851990.Nanometers.

 

Я хочу, чтобы они были такими:
950.851990_nm

С:

 orig_names <- names(df)
new_name <- gsub("Resampled.Band.", "", orig_names)
 

и

 new_name <- gsub(".Nanometers.", "_nm", new_name)
names(all_roi_rfl) <- new_name
 

Я достигаю части того, чего хочу: изменить первую и последнюю части имен столбцов:
1..raster.bsq...404.502014_nm
Я мог бы повторить это, чтобы очистить имена столбцов большую часть пути.

Но как мне справиться с той частью имен столбцов, которая меняется сама по себе, с номером диапазона?

Ответ №1:

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

 x <- c('Resampled.Band.1..raster.bsq...404.502014.Nanometers.', 
       'Resampled.Band.74..raster.bsq...950.851990.Nanometers.')

sub('.*raster.bsq\. (\d \.\d )\.Nanometers\.', '\1_nm', x)
#[1] "404.502014_nm" "950.851990_nm"
 

Это извлекает число, которое встречается между "raster.bsq" и "Nanometers" и добавляется "_nm" к извлеченному значению.

В вашем случае для замены имен столбцов было бы :

 names(all_roi_rfl) <- sub('.*raster.bsq\. (\d \.\d )\.Nanometers\.', '\1_nm', names(all_roi_rfl))
 

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

1. еще раз спасибо, кажется, я не понимаю синтаксис. теперь у меня есть «»»X745.971008.Nanometers»»‘ в качестве имени и не могу понять, как сделать это в том же формате, что и в OP! попытка «‘имена (df) <- sub(‘X\. (\ d \.\d )\.Нанометры \.’, ‘\ 1_nm’, имена (df))»‘. заранее спасибо, также @pyll

2. Для этого потребуется другое регулярное выражение. Можете ли вы задать это как новый вопрос?

Ответ №2:

Ответ, аналогичный ответу Ронака, но использующий gsub вместо этого.

Сначала создайте фрейм данных…

 df <-
  data.frame(
    Resampled.Band.1..raster.bsq...404.502014.Nanometers. = c(1, 2, 1, 2),
    Resampled.Band.74..raster.bsq...950.851990.Nanometers. = c('a', 'b', 'c', NA))
 

с помощью gsub определите строку до и после фрагмента, который вы хотите извлечь

 colnames(df) <- gsub(".*raster.bsq...(. ).Nanometers.", "\1_nm", colnames(df))