#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))