2011-05-25 36 views
14

El archivo CSV se ve así (modificado por brevedad). Varias columnas tienen espacios en su título y R parece no poder distinguirlas.R: Importar CSV con nombres de columna que contienen espacios

 
Alias;Type;SerialNo;DateTime;Main status; [...] 
E1;E-70;781733;01/04/2010 11:28;8; [...] 

Aquí está el código que estoy tratando de ejecutar:

s_data <- read.csv2(file=f_name) 
attach(s_data) 

s_df = data.frame( 
       scada_id=ID, 
       plant=PlantNo, 
       date=DateTime, 
       main_code=Main status, 
       seco_code=Additional Status, 
       main_text=MainStatustext, 
       seco_test=AddStatustext, 
       duration=Duration) 

detach(s_data) 

También he intentado sustituir

main_code=Main\ status 

y

main_code="Main status" 
+1

@klonq: por qué no probar la función read.table, apoyo espacio en el nombre de la columna – smack

+2

@smack: no del todo. 'read.csv2' es solo un contenedor para' read.table', por lo que admite las mismas cosas. En cualquier caso, puede usar 'check.names = TRUE' para permitir espacios en los nombres de las columnas (pero generalmente no es una buena idea) –

+0

Los datos que ha pegado del archivo" CSV "no son CSV; parece delimitado por espacios o por tabuladores. read.csv2() asume un punto y coma por defecto. ¿El archivo realmente se parece a lo que has pegado aquí? – neilfws

Respuesta

23

A menos que especifique check.names=FALSE, R convertirá los nombres de columna que no son nombres de variable válidos (por ejemplo, contienen espacios o caracteres especiales o comienzan con números) en nombres de variable válidos, p. reemplazando espacios con puntos Pruebe names(s_data). Si usa , use check.names=TRUE, luego use comillas simples (`) para rodear los nombres.

También recomendaría usar rename del paquete reshape.

s_data <- read.csv2(file=f_name) 
library(reshape) 
s_df <- rename(s_data,ID="scada_id", 
       PlantNo="plant",DateTime="date",Main.status="main_code", 
       Additional.status="seco_code",MainStatustext="main_text", 
       AddStatustext="seco_test",Duration="duration") 

Por lo que vale la pena, las herramientas tidyverse (es decir readr::read_csv) tienen el defecto opuesto; no transforman los nombres de las columnas para convertirlos en símbolos R legales a menos que usted lo solicite explícitamente.

5

Creo espacios son reemplazados por puntos "." al importar archivos CSV. Entonces escribirías, por ejemplo Main.status. Puede verificar ingresando names(s_data) para ver cuáles son los nombres.

4

Datos_globales < - read.csv (file = f_nombre, check.names = FALSO)

Cuestiones relacionadas