对于tidyverse用户,dplyr是处理数据的新方法.
对于试图避免使用旧包plyr的用户,dplyr中rbind.fill的等效功能是什么?
我正在尝试使用下面的代码复制我的数据框中的行。但是,我发现它很慢。
duprow = df[1,]
for(i in 1:2000)
{
print(i)
df = rbind(df,duprow)
}
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法?
我目前正在使用该tidyr包来解除列表列的嵌套。然而,我正在寻找一种更快的方法并转向data.table(我是一个菜鸟)。考虑以下示例:
dt1 <- data.table::data.table(
a = c("a1", "a2"),
df1 = list(data.frame(
b = c("b1", "b2")
))
)
tidyr::unnest(dt1, df1)
#> # A tibble: 4 x 2
#> a b
#> <chr> <chr>
#> 1 a1 b1
#> 2 a1 b2
#> 3 a2 b1
#> 4 a2 b2
dt1[, data.table::rbindlist(df1), by = .(a)]
#> a b
#> 1: a1 b1
#> 2: a1 b2
#> 3: a2 b1
#> 4: a2 b2
Created on 2021-06-22 by …Run Code Online (Sandbox Code Playgroud) 我正在研究大量的data.table(250万行)银行间贷款.这是前20个的摘录:
> dput(head(clean,20))
structure(list(time = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L,
4L, 4L, 1L, 2L, 3L, 4L, 3L, 4L, 4L, 4L), bal = structure(c(2L,
4L, 4L, 4L, 4L, 4L, 3L, 3L, 9L, 4L, 2L, 3L, 3L, 3L, 3L, 2L, 4L,
5L, 2L, 15L), .Label = c("32001", "32002", "32003", "32004",
"32005", "32006", "32007", "32008", "32009", "32010", "32201",
"32202", "32203", "32204", "32205", "32206", "32207", "32208",
"32209", "32210"), class = "factor"), lender = c(2003L, 2547L,
2547L, 574L, 574L, 574L, …Run Code Online (Sandbox Code Playgroud)