如果我有这样的列表:
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
对此有任何想法吗?
答案 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