【发布时间】:2020-11-20 15:56:44
【问题描述】:
我已经编写了下面的代码来获取两个数据帧并根据this 示例将它们逐行交织。我相信这是使用 Bresenham 的线算法,该算法将较短的数据帧均匀地分散在较长的数据帧中。
interleave_rows <- function(x, y) {
m <- nrow(x)
yi <- 1
len <- m + nrow(y)
err <- len %/% 2
res <- x
for (i in 1:len) {
err <- err - m
if (err < 0) { err <- err + len } else {
res <- add_row(res, !!! slice(y, yi), .before = i)
yi <- yi + 1
}
}
res
}
l <- list(
a = tibble(n = 1:3, l = letters[1:3]),
b = tibble(n = 4:9, l = letters[4:9]),
c = tibble(n = 10:11, l = letters[10:11])
)
reduce(l, interleave_rows)
我在一个闪亮的应用程序中使用它作为减少的一部分,它有点慢。我也不认为这是解决这个问题的一种非常整洁或实用的方法。如果没有循环和重新分配变量,我无法理解如何做到这一点,但我怀疑这样做会更快。有更好的方法吗?
【问题讨论】:
标签: r dplyr functional-programming purrr