首页 > 解决方案 > 将列表列表转换为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)

标签: rlistlapply

解决方案


按照评论中的建议使用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

推荐阅读