2012-02-01 51 views
18

当我在R中使用read.csv()函数来加载数据时,我经常发现X已被添加到变量名称中。我想我总是在第一个变量中看到它,但我可能是错的。R-为什么将X添加到我数据框中的变量名称中?

起初,我认为R可能会这样做,因为我在变量名的开头有一个空格 - 我不知道。第二,我曾经在某处读过如果你有一个以数字开头的变量,或者是一个非常短的变量名,R会添加X​​.变量名是所有文本和这个名字的长度变量是12个字符,所以它不短。

现在,这纯粹是一种烦恼。我可以重新命名该列,但它确实增加了一个步骤,虽然只是一个小步骤。

有没有办法阻止流氓X从渗透我的数据框?

这里是我的原代码:

df <- read.csv("/file/location.filecsv", header=T, sep=",") 

这里是有问题的变量:

str(orders) 
'data.frame': 2620276 obs. of 26 variables: 
$ X.OrderDetailID : Factor w/ 2620193 levels "(2620182 row(s) affected)",..: 105845 
+1

您可以发布与XS和你使用的数据读取代码中的变量名检查有效的变量名? – 2012-02-01 15:45:56

+1

我还是不明白*为什么会发生这种情况。事实上,它发生(主要是?)到第一个变量名称暗示我,你在某种程度上以文件开头的特殊字符结束了? – 2012-02-01 18:41:49

回答

32

read.tableread.csvcheck.names=的说法,你可以设置为FALSE

例如,该输入一个只包含头的尝试:

> read.csv(text = "a,1,b") 
[1] a X1 b 
<0 rows> (or 0-length row.names) 

> read.csv(text = "a,1,b", check.names = FALSE) 
[1] a 1 b 
<0 rows> (or 0-length row.names) 
+0

check.names = FALSE是胜利者....感谢您的帮助! – mikebmassey 2012-02-01 16:22:13

3

这是令人惊讶的行为,但我认为我们需要一个可重复的例子。也许你有一些隐藏/特殊字符隐藏在你的文件中?

names(read.csv(textConnection(
"abcdefghijkl, a1,2x"))) 

表现良好。你能否沿着这些线路举例说明你的问题?

正如其他答案中所述,check.names=FALSE是一种可能的解决方法。你可以用make.namesread.csv deafults实验,以确定该行为......

2

正如所说的Gabor,默认情况下在你的标题行转换名是有效的变量名(使用check.names = FALSE关闭这个功能)。这是使用功能make.names完成的。该功能的帮助页面解释了什么构成了有效的变量名称。

语法上有效的名称由字母,数字和点或 下划线字符,以字母或不进行 由若干点开始。名称如“.2way”无效,并且 保留字也不是。

保留字列表位于帮助页?reserved上。

另一个条件是变量名称必须是10000个字符或更少,但make.names不会缩短它。所以要注意真的是与你的变量名称详细。

可以使用

library(assertive.code) 
is_valid_variable_name(x) 
+0

以每分钟200个字符的平均打字速度 - 即输入每个变量名称50分钟 - 哎! – James 2012-02-01 16:54:23

相关问题