如何将一列一和零作为逻辑
直接读入,从而避免后续转换?
在一个大的 csv 文件中,有几列的值为零或一,我想将其用作 R 中的逻辑变量。
如果我将这些 colClasses
指定为逻辑,则 read.csv
会提示 expected 'a logical', got '0':
Error in scan(file, what, nmax, sep,
dec, quote, skip, nlines, na.strings, :
scan() expected 'a logical', got '0'
另一方面,如果我将那些 colClasses
指定为整数,则 read.csv
会成功。之后,我可以使用 as.logical()
转换它们。
最佳答案
tl;dr 不,据我所知不可能。
我不知道您为什么在转换后不满意,但您可以编写一个包装器:假设您实际上从来不想阅读包含 T
/F 的列
/TRUE
/FALSE
值:
read.csv2 <- function(file,colClasses,...) {
lcols <- which(colClasses=="logical")
colClasses[lcols] <- "integer"
x <- read.csv(file,colClasses=colClasses,...)
x[lcols] <- lapply(x[lcols],as.logical)
x
}
(未经测试!)
否则,我会为 readr
或 data.table::fread
或 ...
据我所知,在有人提出相反的证据之前,你原来的问题的答案
How can a column of zeros and ones be read in directly as logical [using only base R functions such as
read.table
], thereby avoiding subsequent conversions?
"这不可能吗?";不是不合理,但不可能。您可以通过 http://bugs.r-project.org 提交功能请求,或在 r-devel@r-project.org
...
关于read.csv 列的零和一为逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402519/