r - 将列表列表转换为R中的特定长度
问题描述
如何创建具有特定长度 20,30,40 的 3 个列表的列表,以获取最后 20 个数据向量作为 list1,最后 30 个数据向量作为 list2,最后 40 个数据向量作为 list3
转动
data <- seq(1,100,1)
length.y <- c(20,30,40)
进入
y[[1]]=seq(81,100,1)
y[[2]]=seq(71,100,1)
y[[3]]=seq(61,100,1)
我可以使用 for 循环或创建这样的函数
y <- rep(list(0),3)
for(i in 1:3){
y[[i]] <- data[(length(data)-length.y[i]+1):length(data)]
}
我的数据很复杂,那么有没有更简单的方法来获得相同的结果?(例如使用 lapply)
解决方案
按照评论中的建议使用tail
是一种简单的方法。您还可以将for
循环代码转换lapply
为:
n <- length(data)
lapply(length.y, function(x) data[(n-x + 1):n])
#[[1]]
# [1] 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
#[19] 99 100
#[[2]]
# [1] 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#[19] 89 90 91 92 93 94 95 96 97 98 99 100
#[[3]]
# [1] 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#[19] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
#[37] 97 98 99 100