从一个更大的列表创建子列表

Creating sublists from one bigger list

我正在用 R 写我的论文,如果可能的话,我希望对我遇到的问题有一些帮助。

我有一个名为 tkalp 的 table,它有 2 列和 3001 行,在我编写的 'subset' 命令之后,这个 table 现在包含 1084 行并称为 kp . kp 的一些值是:

如您所见,V1 列中的某些值连续使用 step = 2,而有些则不是。

所以我的难点是:

1. 我想 'break' 这个大的 list/table 变成更小的 lists/tables ,它只包含连续的数字。对于这个困难,我尝试用这些命令来实现它,但它没有按计划进行:

for (n in 1:nrow(kp)) {
  kp1 <- subset(kp, kp[n+1,1] - kp[n,1])==2)
}

2. 完成此任务后,我想只保留包含超过 10 行的子列表。

任何想法或帮助都非常受欢迎!非常感谢

编辑

我已经上传了我的 table 的照片,并且我已经将我想要包含在不同 table 中的数字分开了。我想为所有原始 table.

这样做

蓝色比原来小table

黑一个

黄色另一个

红色另一个

在创建所有较小的 table 之后,我只想保留包含 10 个以上数字的 table。例如我不想保留黄色 table 因为它只包含 4 个数字。

再次感谢您

怎么样

           df <- data.frame(V1=c(1,3,5,10,12,14, 20, 22), V2=runif(8))
            df$diff <- c(2,diff(df$V1))
            df$numSubset <- cumsum(df$diff != 2) + 1
            iter <- seq(max(df$numSubset))
            purrr::map(iter, function(i) filter(df, numSubset == i))
            listOfSubsets <-  purrr::map(iter, function(i) dplyr::filter(df, numSubset == i))

然后循环遍历列表,select 仅显示您想要的列表。顺便说一句,purrr 还提供了一种方法来过滤您获得的列表而无需循环。查看 purrr 的文档。

带底座 R

kp=data.frame(V1=c(seq(8628,8618,by=-2),seq(8576,8566,by=-2),78,76),V2=runif(14))
kp$diffV1=c(-2,diff(kp$V1))/-2
kp$group=cumsum(ifelse(kp$diffV1/-2==1,0,1))+1
lkp=split(kp,kp$group)

# > kp
#      V1         V2 diffV1 group
# 1  8628 0.74304325     -2     1
# 2  8626 0.84658101     -2     1
# 3  8624 0.74540089     -2     1
# 4  8622 0.83551473     -2     1
# 5  8620 0.63605222     -2     1
# 6  8618 0.92702915     -2     1
# 7  8576 0.81978587    -42     2
# 8  8574 0.01661538     -2     2
# 9  8572 0.52313859     -2     2
# 10 8570 0.39997951     -2     2
# 11 8568 0.61444445     -2     2
# 12 8566 0.23570017     -2     2
# 13   78 0.58397923  -8488     3
# 14   76 0.03634809     -2     3