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

时间:2017-12-16 13:17:13

标签: r dplyr

我正在处理包含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语义来表达)。

1 个答案:

答案 0 :(得分: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 !!