【问题标题】:Creating sublists from one bigger list从一个更大的列表创建子列表
【发布时间】:2018-10-02 17:53:16
【问题描述】:

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

我有一个名为 tkalp 的表,它有 2 列和 3001 行,在我编写的“子集”命令之后,这个表现在包含 1084 行并称为 kp。 kp的一些值是:

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

所以我的困难是:

1. 我想将这个大列表/表格“分解”为仅包含连续数字的较小列表/表格。对于这个困难,我尝试使用这些命令来实现它,但它并没有按计划进行:

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

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

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

编辑

我已经上传了一张我的表格的图片,并且我已经将我想要包含在不同表格中的数字分开了。我想对所有原始表都这样做。

蓝色是比原来的小一张

黑色另一个

黄色另一个

红色另一个

在创建所有这些较小的表格后,我想只保留包含超过 10 个数字的表格。例如,我不想保留黄色表格,因为它只包含 4 个数字。

再次感谢您

【问题讨论】:

  • 请使用dput() 函数(不是图像)发布您的数据示例(和想要的输出),以便我们可以测试我们的解决方案。
  • 好的,是的,我认为这更好,更准确。我刚刚编辑了我的原始帖子,结束了我的表格,我又发布了一张图片来描述我到底想要什么

标签: r list subset sublist


【解决方案1】:

怎么样

           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))

然后您遍历列表并仅选择您想要的那些。顺便说一句,purrr 还提供了一种过滤您获得的列表而无需循环的方法。检查 purrr 的文档。

【讨论】:

  • 我喜欢你的想法和你解决问题的方式。请问您提到的“iter”是什么?
  • 哦,抱歉,忘记粘贴定义了“iter”的行。现在我编辑了它。 "iter" 让你遍历 "numSubSet"
【解决方案2】:

有基础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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多