如何从列表中选择某些元素?

时间:2018-11-20 10:24:39

标签: r

如果我有这样的列表:

 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 :(得分:2)

你可以做

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

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

#[[3]]
#[1]  1.00 51.23

答案 1 :(得分:2)

使用tail的另一个选项,即

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

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

#[[3]]
#[1]  1.00 51.23

答案 2 :(得分:1)

使用Map的解决方案(感谢@ tail的@Sotos):

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