read.table reads “T” as TRUE and “F” as FALSE, how to avoid?

前端 未结 3 417
忘掉有多难
忘掉有多难 2020-12-10 11:35

I have a file with the data c(\"A\",\"T\",\"B\",\"F\").

When I use:

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

R in

相关标签:
3条回答
  • 2020-12-10 12:17

    I came across to similar problem here is the solution:

    #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
    
    0 讨论(0)
  • 2020-12-10 12:18

    If you don't want to change the class of all the columns, revalue works too, but is better for making a simple change to one column.

    df$V3 <- as.factor(revalue(df$V3, c("TRUE" = "T", "FALSE" = "F")))
    
    0 讨论(0)
  • 2020-12-10 12:19

    If all your columns are characters then try this:

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

    Else, you'll have to pass the type of each column in colClasses as: colClasses = c("numeric", "numeric", "character", ...)

    0 讨论(0)
提交回复
热议问题