2013-04-25 11 views
11

Mam plik z danymi c("A","T","B","F").read.table czyta "T" jako PRAWDA i "F" jako FALSE, jak uniknąć?

Gdy używam:

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

R interpretuje charakter T jako TRUE i F jako FALSE

robię coś złego?

+3

Nie, po prostu wpadam na jeden z dobrze znanych butów :-). Wszyscy genetyści biorą w tym udział podczas sekwencjonowania genów! –

Odpowiedz

16

Jeśli wszystkie kolumny są znaki następnie spróbuj tego:

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

Else, będziesz musiał przejść typ każdej kolumny w colClasses jak: colClasses = c("numeric", "numeric", "character", ...)

+0

dzięki za szybką odpowiedź – nopeva

1

Przyjechałem tu w poprzek do podobnego problemu to rozwiązanie:

#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

Jeśli nie chcesz zmieniać klasy wszystkich kolumn, również warto dokonać ponownej oceny, ale lepiej jest zrobić prostą literę do jednej kolumny.

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

Błąd w is.factor (x): nie można znaleźć funkcji "revalue" ===> library ("plyr") –

+0

ponadto potrzebowałem "... <- as.factor (revalue) (as.character (df $ V3), c (.... " –

Powiązane problemy