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