【问题标题】:Repeat dplyr code snippet x number of times r重复 dplyr 代码片段 x 次数 r
【发布时间】:2019-09-30 05:38:00
【问题描述】:

是否可以将代码行重复特定次数?举个例子,我想一次删除最多 10 行 mtcars 数据,这些数据在 mpg 列中具有“1”或在 wt 列中具有 2,首先运行 test,然后运行 ​​test2 并重新开始。如果 test 或 test2 之一用完了行,我们仍然需要完成另一个。

test <-mtcars %>% filter(str_detect(mpg, "1"))%>% slice(tail(row_number(),1))
mtcars <- anti_join(mtcars, test, by = c("mpg"))

test2 <-mtcars %>% filter(str_detect(wt, "2"))%>% slice(tail(row_number(),1))
mtcars <- anti_join(mtcars, test2, by = c("wt"))

我承认我没有尝试做这种事情的经验。我看过其他几个例子,但我真的不知道如何将创建函数之类的东西应用到我正在尝试做的事情中。

更新:

这是一个更好的例子。我有一些这些正在一次添加到一个大数据框架中。我需要多次重新运行每个块来填充数据框。

test <-iris %>% filter(str_detect(iris$Petal.Length, "1"))
testa <-test%>%slice(tail(row_number(),1))
iris <- anti_join(iris, testa, by = c("Petal.Length"))
bigdf <- rbind(testa)

【问题讨论】:

  • 您是否有理由要一次删除一行,而不是一次删除与过滤条件匹配的所有行?如果您可以一次删除 10 行,那会起作用吗(如果是这样,您是否想同时使用这两个条件,或者第一个然后第二个最多 10 行)?另外,您可以将slice(tail(row_number(),1)) 更改为slice(n())
  • 这只是一个例子,诚然可能不是一个完美的例子。我正在尝试找出如何执行此操作的示例,其中包含更多不幸的机密数据。
  • 顺便说一句:slice(tail(row_number(),1)) 可以替换为 tail(1)slice(n())

标签: r


【解决方案1】:

您可以考虑使用循环来重复执行代码特定次数。

for (i in 1:10) {
    test <-mtcars %>% filter(str_detect(mpg, "1"))%>% slice(tail(row_number(),1))
mtcars <- anti_join(mtcars, test, by = c("mpg"))
}

例如上面的代码会重复10次。

【讨论】:

  • 非常简单,可以按我的需要工作,感谢您抽出宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多