从列表的第i个条目中删除前k个元素

时间:2018-12-20 09:27:33

标签: r list

我有一个类似

的列表
[[1]]
[1] 4 2 3 5 8 0
[[2]]
[1] 11 -4 6 8 10
[[3]]
[1] 0 -6 9 12 

我希望从列表的第i个条目中删除前3-i个元素:

[[1]]
[1] 3 5 8 0
[[2]]
[1] -4 6 8 10
[[3]]
[1] 0 -6 9 12 

相关问题已发布here,但是将从列表的每个元素中删除相同的元素。

3 个答案:

答案 0 :(得分:3)

这是另一个想法,

lapply(l1, function(i)tail(i, min(lengths(l1))))
#[[1]]
#[1] 3 5 8 0

#[[2]]
#[1] -4  6  8 10

#[[3]]
#[1]  0 -6  9 12

数据:

dput(l1)
list(c(4, 2, 3, 5, 8, 0), c(11, -4, 6, 8, 10), c(0, -6, 9, 12
))

答案 1 :(得分:2)

使用lapply,我们可以从每个列表中删除前i个元素,如果3-x小于等于0,则按原样返回列表。

lapply(seq_along(lst), function(x) 
           if ((3-x) > 0) lst[[x]][-seq(3-x)] else lst[[x]])


#[[1]]
#[1] 3 5 8 0

#[[2]]
#[1] -4  6  8 10

#[[3]]
#[1]  0 -6  9 12

数据

lst <- list(c(4, 2, 3, 5, 8, 0), c(11, -4, 6, 8, 10), c(0 ,-6, 9,12 ))

答案 2 :(得分:-1)

让i,j,k分别为数组a [],b [],c []中的第一个元素的索引。删除min(a [i],b [j],c [k])并根据最小值所在的位置增加i或j或k。在第3种情况下,请重复此操作,直到您要删除的号码次数相同。