Переименование элементов списка

#r #list #rename

#r #Список #переименовать

Вопрос:

Я создаю большой список, извлекающий переменные из фрейма данных. Вот один из примеров:

 df <- data.frame (A-Imp = c(4,8,2,4,3),
      A-Rea = c(4,4,5,6,7),
      B-Imp = c(3,2,6,5,8),
      B-Rea = c(1,2,6,7,9),
      C-Imp = c(4,8,6,6,10),
      C-Rea = c(6,8,5,1,9),
      D-Imp = c(1,6,4,8,8),
      D-Rea = c(3,3,6,1,10))

groups <- list(
   "groupA" <- c("A-Imp", "A-Rea"),
   "groupB" <- c("B-Imp", "B-Rea"),
   "groupC" <- c("C-Imp", "C-Rea"),
   "groupD" <- c("D-Imp", "D-Rea"))
 

Что я хочу сделать, так это переименовать записи каждого вектора, сохранив только последнюю часть имени. Это выглядело бы примерно так:

 groups <- list(
   "groupA" <- c("Imp", "Rea"),
   "groupB" <- c("Imp", "Rea"),
   "groupC" <- c("Imp", "Rea"),
   "groupD" <- c("Imp", "Rea"))
 

Поскольку это очень длинный список, я не хочу делать это вручную. Есть какие-нибудь идеи о том, как я могу действовать дальше?

Ответ №1:

 groups <- lapply(groups, sub, pattern = "[A-Z]-", replacement = "")

str(groups)
List of 4
 $ : chr [1:2] "Imp" "Rea"
 $ : chr [1:2] "Imp" "Rea"
 $ : chr [1:2] "Imp" "Rea"
 $ : chr [1:2] "Imp" "Rea"
 

Ответ №2:

С помощью sub вы можете удалить все, вплоть до подчеркивания.

 result <- lapply(groups, function(x) sub('.*-', '', x))
result

#[[1]]
#[1] "Imp" "Rea"

#[[2]]
#[1] "Imp" "Rea"

#[[3]]
#[1] "Imp" "Rea"

#[[4]]
#[1] "Imp" "Rea"
 

Ответ №3:

Используя Map() :

 Map(function(x){gsub("^\w\-", "", x)}, groups)
 

Ответ №4:

Использование map и str_remove

 library(purrr)
library(stringr)
map(groups, str_remove, pattern = ".*-")
 

-вывод

 #[[1]]
#[1] "Imp" "Rea"

#[[2]]
#[1] "Imp" "Rea"

#[[3]]
#[1] "Imp" "Rea"

#[[4]]
#[1] "Imp" "Rea"