我正在研究一个包含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语义来表达)。
我假设你有一个大型数据集,并希望有效地使用可用的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!