我有一个类似
的列表[[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,但是将从列表的每个元素中删除相同的元素。
答案 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种情况下,请重复此操作,直到您要删除的号码次数相同。