CSV文件如下所示(为简洁起见而修改)。有几列在标题中有空格,R似乎无法区分它们。
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"
答案 0 :(得分:24)
除非您指定check.names=FALSE
,否则R会将无效变量名称的列名称(例如,包含空格或特殊字符或以数字开头)转换为有效的变量名称,例如:用点替换空格。试试names(s_data)
。如果您执行使用check.names=TRUE
,请使用单引号(`)括起名称。
我还建议您使用rename
包中的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")
对于它的价值,tidyverse工具(即readr::read_csv
)具有相反的默认值;除非您明确要求,否则他们不会转换列名称以使其成为合法的R符号。
答案 1 :(得分:5)
我相信空间被点“替换”。导入CSV文件时。所以你要写,例如Main.status
。您可以输入names(s_data)
进行检查,看看名称是什么。
答案 2 :(得分:5)
s_data&lt; - read.csv(file = f_name,check.names = FALSE)