R + dplyr:布尔人最有效的重构?

问题描述 投票:0回答:1

我正在研究一个包含300列的300,000个项目的数据集。我一直在使用dplyr进行大量的数据集操作。

我将数据导入为带有readr的CSV文件。有很多可选的布尔字段以CSV字符格式存储为“Y”,“N”或“”。我目前将这些作为读取器的因素导入。

我正试图将它们转换为布尔值。是三态,我这样做了如下:

importedData <- dplyr::mutate(importedData,
    bar <- (foo == 'Y'),
    bar <- dplyr::if_else(
      foo,
      NA,
      bar),
    foo = NULL)
...repeated for about 30 fields.
)

importedData <- dplyr::rename(importedData,
  foo = bar)

有没有更有效的方法来做到这一点?用于在单次传递中执行此操作的加成标记(即,因此变量在没有第二次重命名调用的情况下就地替换和/或因此可以使用tidyeval语义来表达)。

r dplyr
1个回答
0
投票

我假设你有一个大型数据集,并希望有效地使用可用的RAM。这是你可以做的事情:

colsOfInterest <- ("var1", "var2", "var3")

for(i in colsOfInterest){
    importedData[i] <- ifelse(is.na(importedData[i]),NA,
                              ifelse(importedData[i] == "Y", TRUE, FALSE))
    gc()
}

gc()的调用将确保您在每次通过感兴趣的变量后继续重用可用的RAM。我发现当你有RAM约束时,显式调用Garbage Collector非常有用。您也在替换原位,而不是创建一组全新的变量,删除旧变量并将新变量重命名为旧变量名。

HTH!

© www.soinside.com 2019 - 2024. All rights reserved.