studio sep read r read.csv

sep - read.csv campos en blanco a NA



read table r syntax (4)

Tengo un archivo de texto delimitado por tabuladores, llamado ''a.txt''. La columna D está vacía.

A B C D 10 20 NaN 30 40 40 30 20 20 NA 20

Quiero que el marco de datos se vea y actúe exactamente como el archivo de texto, con un espacio en la segunda fila y en la segunda columna.

Desafortunadamente, read.csv está convirtiendo todos los espacios en blanco y NA a "NA". Quiero leer NA y NaN como personajes.

b<- read.csv("a.txt",sep="/t", skip =0, header = TRUE, comment.char = "",check.names = FALSE, quote="", )

Para resumir: quiero replicar los mismos valores en el archivo de salida sin modificarlos:

  • Si hay una entrada en blanco, la salida debe estar en blanco.
  • Si la entrada tiene NA o Nan, entonces la salida también debería tener NA o NaN.

Después de leer el archivo csv, intente lo siguiente. Reemplazará los valores de NA con "".

b[is.na(b)]<-""

Bastante seguro de que no arreglará sus valores de NaN. Eso tendrá que ser resuelto en una declaración separada.

b[is.nan(b)]<-""


El valor predeterminado para na.strings es solo "NA", por lo que quizás necesite agregar "NaN". Los espacios en blanco verdaderos ("") están configurados como faltantes pero los espacios ("") no están

b<- read.csv("a.txt", skip =0, comment.char = "",check.names = FALSE, quote="", na.strings=c("NA","NaN", " ") )

No está claro que este sea el problema, ya que su ejemplo de datos tiene un formato incorrecto y no tiene comas. Ese puede ser el problema fundamental ya que read.csv no permite la separación de pestañas. Use read.delim o read.table si sus datos tienen separación de pestañas.

b<- read.table("a.txt", sep="/t" skip =0, header = TRUE, comment.char = "",check.names = FALSE, quote="", na.strings=c("NA","NaN", " ") ) # worked example for csv text file connection bt <- "A,B,C 10,20,NaN 30,,40 40,30,20 ,NA,20" b<- read.csv(text=bt, sep=",", comment.char = "",check.names = FALSE, quote="/"", na.strings=c("NA","NaN", " ") ) b #-------------- A B C 1 10 20 NA 2 30 NA 40 3 40 30 20 4 NA NA 20

Ejemplo 2:

bt <- "A,B,C,D 10,20,NaN 30,,40 40,30,20 ,NA,20" b<- read.csv(text=bt, sep=",", comment.char = "",check.names = FALSE, quote="/"", na.strings=c("NA","NaN", " ") , colClasses=c(rep("numeric", 3), "logical")) b #---------------- A B C D 1 10 20 NA NA 2 30 NA 40 NA 3 40 30 20 NA 4 NA NA 20 NA > str(b) ''data.frame'': 4 obs. of 4 variables: $ A: num 10 30 40 NA $ B: num 20 NA 30 NA $ C: num NA 40 20 20 $ D: logi NA NA NA NA

Es un poco interesante que NA y NaN no sean idénticos para los vectores numéricos. NaN es devuelto por operaciones que no tienen un significado matemático (pero como se indica en la página de ayuda que aparece con ?NaN , los resultados de las operaciones pueden depender del sistema operativo en particular. Las pruebas de igualdad no son apropiadas para NaN o NA. is funciones para ellos:

> Inf*0 [1] NaN > is.nan(c(1,2.2,3,NaN, NA) ) [1] FALSE FALSE FALSE TRUE FALSE > is.na(c(1,2.2,3,NaN, NA) ) [1] FALSE FALSE FALSE TRUE TRUE # note the difference


Puede especificar colClasses en la sentencia read.csv para leer la columna como texto.


Utilice el argumento na.string.
na.string se utiliza para definir qué argumentos deben leerse como un valor n de los datos. Así que si mencionas

read.csv(text=bt, na.string = "abc")

entonces, donde quiera que esté en sus datos, abc lo convertirá en na.
Como no se encuentra abc en sus datos, no convertirá ningún valor en na.