我有一个大型数据框,我将两列相乘以获得另一列。起初我正在运行一个for循环,如下所示:
for(i in 1:nrow(df)){
df$new_column[i] <- df$column1[i] * df$column2[i]
}
但这需要9天。
另一种选择是plyr
,我实际上可能错误地使用了变量:
new_df <- ddply(df, .(column1,column2), transform, new_column = column1 * column2)
但这需要永远
答案 0 :(得分:21)
正如Blue Magister在评论中所说,
df$new_column <- df$column1 * df$column2
应该工作得很好。当然,我们永远无法确定我们是否没有数据示例。
答案 1 :(得分:11)
data.table
解决方案可以避免大量内部复制,同时具有不会使用$
传播代码的优势。
library(data.table)
DT <- data.table(df)
DT[ , new := column1 * column2]
答案 2 :(得分:10)
Sacha的答案的一个次要的,效率稍低的版本是使用transform()
或within()
df <- transform(df, new = column1 * column2)
或
df <- within(df, new <- column1 * column2)
(我讨厌用$
粉碎我的用户代码。)
答案 3 :(得分:1)
您可以简单地创建一个函数来处理各种乘法,如下所示:
group by