2011-05-25 118 views
14

CSV文件看起来像这样(为简洁起见进行了修改)。有几列在标题中有空格,R似乎无法区分它们。R:使用包含空格的列名导入CSV

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

这里是代码我试图执行:

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) 

我也试图取代

main_code=Main\ status 

main_code="Main status" 
+1

@klonq:为什么不试试功能函数read.table,我支持空间列名 – smack 2011-05-25 12:38:31

+2

@smack:不完全是。 'read.csv2'只是'read.table'的一个包装,所以它支持相同的事情。无论哪种情况,您都可以使用'check.names = TRUE'来允许列名中的空格(但通常不是个好主意) – 2011-05-25 12:47:25

+0

您从“CSV”文件粘贴的数据不是CSV;它看起来像空格或制表符分隔。 read.csv2()默认默认使用分号分隔。该文件是否真的看起来像你粘贴在这里? – neilfws 2011-05-25 12:52:03

回答

23

除非您指定check.names=FALSE,否则R会将不是有效变量名称的列名(例如包含空格或特殊字符或以数字开头)转换为有效变量名称,例如,通过用点替换空格。尝试names(s_data)。如果你使用check.names=TRUE,然后使用单引号(`)来包围名称。

我也推荐使用reshape包中的rename

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") 

对于它的价值,在tidyverse工具(即readr::read_csv)有相反的默认值;除非您明确要求它们,否则它们不会转换列名以使其成为合法的R符号。

5

我相信空格就会被取代点“。”导入CSV文件时。所以你会写Main.status。您可以输入names(s_data)查看名称。

4

S_DATA < - read.csv(文件= f_name,check.names = FALSE)