R:需要帮助来加速在data.frame中创建新列

MOM*_*OMO 1 performance r dataframe data.table

我需要帮助来加速一些代码.我有一个data.frame"df",并希望创建新的列并用给定的值填充它们.这里是一个示例代码,我是如何做到的.

df <- as.data.frame(1:20)

a <- c(31:50)
b <- c(201:220)

df[c("A","B")] <- c(a, b) 
Run Code Online (Sandbox Code Playgroud)

现在问题是我的数据很大(几百万行)并且花费的时间比预期的多,所以我认为有更好的方法.有任何想法吗?谢谢!

ili*_*lir 5

data.frame当您尝试添加新列时,扩展s(或任何对象)的任务会导致R复制整个对象.软件包data.table提供了一些添加到data.frame模型上的出色性能功能.它允许(除其他外)添加列到位.请参阅以下代码以获得简单演示:

require(data.table)
a2 <- data.table(x=1:10)
a2[, y:=21:30]   ## this will create y inside a2 without copying it
summary(a2)      ## just like using a data.frame
Run Code Online (Sandbox Code Playgroud)

生成的对象(a data.table)将与(几乎)所有使用的代码一起使用data.frame.它具有大多数操作的替代语法,其执行效率更高.值得花一些时间研究一下.


如果您想添加多个列,那么:

a2[, `:=`(y=21:30, z=31:40)]
Run Code Online (Sandbox Code Playgroud)

编辑: @Thell已经花时间和准备基准用不同的方法来扩展a data.frame.他们建议尽管复制data.frame速度更快.请记住这一点,并查看哪一个最适合您的代码.