【发布时间】:2020-02-12 19:34:18
【问题描述】:
我有一个想要处理的大型数据框(10,000,000+ 行)。我也是 R 的新手,想更好地了解如何处理这样的大型数据集。
我有一个公式,我想将其应用于数据框中的每一行。但是我从经验中发现,“for 循环”和“应用”对于非常大的数据集并不能很好地工作。我一直在尝试使用拆分应用组合,但是当我想逐行应用函数时,我不太明白如何使用它。
这是一个包含 1,000,000 行的示例数据框。我想应用一个函数,它需要每一行,并在两列上执行一个简单的乘法以给出一个输出(我意识到我可以更容易地做到这一点,但我想练习拆分-应用-组合)。
#make a dataframe
df <- data.frame("a"=c(rep("group1",times=500000),rep("group2",times=500000)),
"b"=c(1:1000000),"c"=c(1000001:2000000))
我想要做什么:对于每一行,我想将“b”列中的值乘以“c”列中的值
【问题讨论】:
-
如果你在做成对乘法,没有理由分割/分组。我知道您说过您正在寻求练习,但是在 R 中高效编程的最重要部分就是尽可能使用矢量化操作。
df$b*df$c -
如果您想了解有关高效分组操作的更多信息,我会查看
data.table包。具体来说,data.tablegforce 优化允许非常有效地计算少量的数学分组运算,如求和、均值等。 -
这里的“分裂”有什么意义?
-
如果我有一个更复杂的数据框可以使用怎么办?例如,假设我有一个包含 2 个类别(A 和 B)的数据框,我想使用这两个类别从“查找数据框”中查找一个值。对于一个小数据集,我只需逐行(使用 for 循环或应用),在查找数据框中查找“A 类”和“B 类”,然后插入来自查找数据框的任何值。但是,对于大数据框,这不会那么快......
标签: r large-data split-apply-combine