gpt4 book ai didi

r - 在 data.table 中插入一行

转载 作者:行者123 更新时间:2023-12-02 08:52:00 27 4
gpt4 key购买 nike

如果我有一个数据框

set.seed(12345) 
df=data.frame(a=rnorm(5),b=rnorm(5))

我可以通过例如添加一行

df[6,] =c(5,6)

如果我现在在 data.table 中执行相同的操作

library(data.table)
dt=data.table(df)
dt[6,]=c(5,6)

它因错误而失败。将行插入 data.table 的正确方法是什么?

最佳答案

要扩展@Franks的答案,如果在您的特定情况下您要附加一行,那就是:

set.seed(12345) 
dt1 <- data.table(a=rnorm(5), b=rnorm(5))

以下内容是等效的;我发现第一个更容易阅读,但第二个更快:

microbenchmark(
rbind(dt1, list(5, 6)),
rbindlist(list(dt1, list(5, 6)))
)

正如我们所见:

                             expr     min      lq  median       uq     max
rbind(dt1, list(5, 6)) 160.516 166.058 175.089 185.1470 457.735
rbindlist(list(dt1, list(5, 6))) 130.137 134.037 140.605 149.6365 184.326

如果你想在其他地方插入行,下面的方法也可以,但不太漂亮:

rbindlist(list(dt1[1:3, ], list(5, 6), dt1[4:5, ]))

甚至

rbindlist(list(dt1[1:3, ], as.list(c(5, 6)), dt1[4:5, ]))

给予:

            a          b
1: 0.5855288 -1.8179560
2: 0.7094660 0.6300986
3: -0.1093033 -0.2761841
4: 5.0000000 6.0000000
5: -0.4534972 -0.2841597
6: 0.6058875 -0.9193220

如果您要就地修改一行(这是首选方法),则需要提前定义 data.table 的大小,即

dt1 <- data.table(a=rnorm(6), b=rnorm(6))
set(dt1, i=6L, j="a", value=5) # refer to column by name
set(dt1, i=6L, j=2L, value=6) # refer to column by number

谢谢@Boxuan,我根据您的建议修改了这个答案,这样更快、更容易阅读。

关于r - 在 data.table 中插入一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com