Как выбрать определенные элементы из списка? - PullRequest
0 голосов
/ 20 ноября 2018

Если у меня есть такой список:

 list_data <- list(c("Red", "Green","red"), 
                   c(21,32,11,2,3,6,5,4), 
                   c(1,2,5,4,TRUE, 51.23, 119.1))

Я хочу сохранить последние 2 элемента перед последним из списка: желаемый вывод:

  > list_data
  [[1]]
  [1] "Red"   "Green" 

  [[2]]
   [1]  6  5  

  [[3]]
  [1]   1.00  51.23 

Любая идея включенаэто?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Другой вариант с использованием tail, т.е.

lapply(list_data, function(i)tail(i, 3)[-3])
#[[1]]
#[1] "Red"   "Green"

#[[2]]
#[1] 6 5

#[[3]]
#[1]  1.00 51.23
0 голосов
/ 20 ноября 2018

Решение с Map (спасибо @Sotos за tail):

Map(function(x)tail(x, 3)[-3],list_data) 
# [[1]]
# [1] "Red"   "Green"
# 
# [[2]]
# [1] 6 5
# 
# [[3]]
# [1]  1.00 51.23

Если вы назовете каждый элемент, вы можете получить data.frame, используя purrr:

names(list_data) <- letters[1:3]
purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

# # A tibble: 2 x 3
# a         b     c
# <chr> <dbl> <dbl>
# 1 Red       6   1  
# 2 Green     5  51.2
0 голосов
/ 20 ноября 2018

Вы могли бы сделать

lapply(list_data, function(x) x[(length(x) - 2:1)])
#[[1]]
#[1] "Red"   "Green"

#[[2]]
#[1] 6 5

#[[3]]
#[1]  1.00 51.23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...