【发布时间】:2018-04-15 23:06:22
【问题描述】:
我正在处理一个大型数据集,我们将其命名为 data,并且想要创建一个新列,我们根据某个列 data$input 将其命名为 data$results。结果基于一些条件 if/then 逻辑,所以我原来的方法是这样的:
for (rows in data) {
data$results <- if(data$results == "1" | data$results== "2") {
trueAnswer
} else {
falseAnswer
}
}
对于大型数据帧,此过程可能需要几个小时才能运行。但是,如果我将数据子集到仅包含 data$results 为 1 或 2 的条目和另一个不正确的条目的数据帧中,我可以将 trueAnswer 应用于一个数据帧,将 falseAnswer 应用于另一个数据帧。然后我可以将数据帧重新绑定在一起。这种方法只需要几分钟。
为什么后一种方法使用子集的速度要快得多?这是一个将此过程应用于许多不同数据集的情况,因此前一种方法太慢而无法实用。我只是想了解导致第一种方法效率低下的原因。
【问题讨论】:
-
c(falseAnswer, trueAnswer)[(data$results %in% 1:2) + 1L]