27

当我使用read.csv()in 函数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
4

3 回答 3

39

read.tableread.csv有一个check.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)
于 2012-02-01T15:46:40.553 回答
3

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

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

表现良好。你能按照这些思路举一个例子来说明你的问题吗?

如另一个答案中所述,check.names=FALSE是一种可能的解决方法。您可以尝试make.names确定行为...

于 2012-02-01T15:48:53.687 回答
3

正如 Gabor 所说,默认情况下read.csv会将标题行中的名称转换为有效的变量名称(用于check.names = FALSE关闭此功能)。这是使用函数完成的make.names。该函数的帮助页面解释了有效变量名的构成。

语法上有效的名称由字母、数字和点或下划线字符组成,并以字母或点开头,后跟数字。“.2way”等名称无效,保留字也无效。

保留字列表可在帮助页面上找到?reserved

另一个条件是变量名必须是 10000 个字符或更少,但make.names不会缩短它。所以要小心你的变量名真的很冗长。

您可以使用检查有效的变量名称

library(assertive.code)
is_valid_variable_name(x)
于 2012-02-01T16:30:24.023 回答