假设我在R中有一个480个 Dataframe 的列表,我如何在每32次迭代中从列表中删除16个 Dataframe ?例如,我想删除c(33:48)和c(81:96)等等。
6yt4nkrj1#
我推荐subset:
subset
x <- as.list(1:480) subset(x,c(rep(TRUE,32),rep(FALSE,16))) #Alternatively rep(c(TRUE,FALSE),times = c(32,16))
字符串请注意,逻辑向量会自动循环(重复)到列表的长度。
ltskdhd12#
你可以把你想要删除的索引做一个向量,然后使用负索引删除它们:
to_remove = unlist(lapply(48 * 1:10, \(x) x - (15:0))) ## check it looks right to_remove # [1] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 129 # [34] 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 225 226 # [67] 227 228 229 230 231 232 233 234 235 236 237 238 239 240 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 321 322 323 # [100] 324 325 326 327 328 329 330 331 332 333 334 335 336 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 417 418 419 420 # [133] 421 422 423 424 425 426 427 428 429 430 431 432 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 ## remove them your_list = your_list[-to_remove]
字符串或者你可以把你想保留的东西做成一个逻辑向量,然后用它来索引
keep = rep(rep(c(TRUE, FALSE), times = c(32, 16)), 10) your_list = your_list[keep] ## another way keep = (1:480 - 1) %% 48 < 32 your_list = your_list[keep]
型
1bqhqjot3#
你可以将列表转换成data.frame和子集行,这些子集行不是每个集合的最后16个值。
ls2 <- lapply(1:480, function(x) list(as.data.frame(x))) df <- do.call(rbind, ls2) |> transform(v2 = rep(1:48, 10)) |> subset(!v2 %in% 33:48 )
字符串根据@gregor下面的评论编辑简单地做一个重复1到48的向量,并在不等于33到48的地方进行过滤。
idx = rep(1:48, 10) ls3 <- ls2[!idx %in% 33:48]
3条答案
按热度按时间6yt4nkrj1#
我推荐
subset
:字符串
请注意,逻辑向量会自动循环(重复)到列表的长度。
ltskdhd12#
你可以把你想要删除的索引做一个向量,然后使用负索引删除它们:
字符串
或者你可以把你想保留的东西做成一个逻辑向量,然后用它来索引
型
1bqhqjot3#
你可以将列表转换成data.frame和子集行,这些子集行不是每个集合的最后16个值。
字符串
根据@gregor下面的评论编辑
简单地做一个重复1到48的向量,并在不等于33到48的地方进行过滤。
型