题 read.table读取“T”为TRUE,“F”为FALSE,如何避免?


我有一个包含数据的文件 c("A","T","B","F")

我用的时候:

read.csv(myfile,header=F,stringsAsFactors=F)

R解释人物 T 如 TRUE 和 F 如 FALSE 

我做错了吗?


14
2018-04-25 12:14


起源


不,只是遇到一个众所周知的陷阱:-)。所有遗传学家都在测序基因时遇到这种情况! - Carl Witthoft


答案:


如果您的所有列都是字符,请尝试以下操作:

# replace text = . with your filename
read.csv(text="A,B,T,T", header=FALSE, stringsAsFactors=FALSE, 
            colClasses = c("character"))

否则,你必须传递每列的类型 colClasses 如: colClasses = c("numeric", "numeric", "character", ...)


18
2018-04-25 12:19



谢谢你的快速回复 - nopeva


我遇到的类似问题是解决方案:

#dummy data
df <- read.csv(text="
A,B,T,T,F
T,T,F,T,text1
A,T,NA,F,T",
               header=FALSE, stringsAsFactors=FALSE)
#data
df
#   V1 V2    V3    V4    V5
# 1  A  B  TRUE  TRUE     F
# 2  T  T FALSE  TRUE text1
# 3  A  T    NA FALSE     T

#convert logical columns to single letters
df[,sapply(df,class) == "logical"] <-
  sapply(df[,sapply(df,class) == "logical"],
         function(i) substr(as.character(i),1,1))

#result
df
#   V1 V2   V3 V4    V5
# 1  A  B    T  T     F
# 2  T  T    F  T text1
# 3  A  T <NA>  F     T

1
2018-03-05 10:47





如果您不想更改所有列的类,则重新评估也可以,但更适合对一列进行简单更改。

df$V3 <- as.factor(revalue(df$V3, c("TRUE" = "T", "FALSE" = "F")))

1
2017-10-10 23:59



is.factor(x)出错:找不到函数“revalue”===> library(“plyr”) - Matthias Wuttke
此外,我需要“...... < - as.factor(重估(as.character(df $ V3),c(....” - Matthias Wuttke