Вот один вариант с tidyverse
.Пролистайте list
с map
, slice
интересующей строкой (в данном случае это последняя строка, поэтому можно использовать n()
), mutate
значение столбца и свяжите с исходными даннымибез последнего ряда
library(tidyverse)
map(list1, ~ .x %>%
slice(n()) %>%
mutate(values = names1, names1 = 'replaced') %>%
bind_rows(.x %>% slice(-n()), .))
#[[1]]
# names1 values
#1 a val1_1
#2 b val2_1
#3 c val3_1
#4 f val4_1
#5 replaced x
#[[2]]
# names1 values
#1 a val1_2
#2 b val2_2
#3 f2 val3_2
#4 s5 val4_2
#5 replaced h
Или его можно сделать более компактным с помощью fct_c
из forcats
.Различные уровни factor
могут быть объединены вместе с fct_c
для столбца 'values' и 'names1'
library(forcats)
map(list1, ~ .x %>%
mutate(values = fct_c(values[-n()], names1[n()]),
names1 = fct_c(names1[-n()], factor('replaced'))))
Или с использованием аналогичного подхода с base R
, где мы перебираем list
с lapply
, затем преобразуйте data.frame
в matrix
, rbind
подмножество матрицы, то есть последнюю строку, удаленную со значениями интереса, и преобразуйте в data.frame
(по умолчанию stringsAsFactors = TRUE
- таконо преобразуется в factor
)
lapply(list1, function(x) as.data.frame(rbind(as.matrix(x)[-5, ],
c('replaced', as.character(x$names1[5])))))