2014-10-17 126 views
5

我有一个结果3列的数据帧的一些数据数据帧的列当我打印结果我看到:无法访问

results 

TIMESTAMP     SYMBOL_NAME   "t.price" 
1 2014-10-17 14:00:00  GOOG     400.25 

的通知“”周围的t.price列

当我去访问t.price列,就像它返回null。

results$t.Price 
NULL 

当我做

names(results) 

我看到

[1] "TIMESTAMP"  "SYMBOL_NAME"  "\"t.PRICE\"" 

你能告诉我是怎么回事,为什么“”的出现或者我如何可以访问t.price?

+0

如果你键入'结果$“t.PRICE”'或'结果$ \“t.PRICE \”会发生什么'? – dg99 2014-10-17 22:30:35

+0

东西发生在你读完数据之后 - 一个简单而快速的解决方法是通过..'names(results)< - c([“TIMESTAMP”,“SYMBOL_NAME”,“t.PRICE”)'重命名你的变量。看看'str(results)' – user20650 2014-10-17 22:31:39

+0

你也可以使用results [,3]来访问那个列 – Sarah 2014-10-17 22:37:48

回答

3

试试这个:

names(results) <- make.names(names(results)) 

这就是当使用read.table及其后代是被应用了相同的功能。

+1

我想这不是太重要,但是当我运行这个时,我在最后一列得到了'X.t.price'。那是你得到的吗? – 2014-10-17 22:47:24

+0

我没有原始对象,因为它没有以可重现的形式呈现,但是,是的,这就是我现在使用'make.names'得到的结果,并且对于您的下一个问题,这不是我所预测的。 – 2014-10-17 23:49:27

3

您可以删除多余的报价与gsub

results 
#    TIMESTAMP SYMBOL_NAME "t.price" 
# 1 2014-10-17 14:00:00  GOOG 400.25 
results$t.price 
# NULL 
names(results)[3] <- gsub('\"', "", names(results)[3]) 
results$t.price 
# [1] 400.25 

为安全起见,您可能希望对数据集的所有名称运行(只删除这两个[3])。

3

无论您的数据框的来源是什么,看起来t.Price列都被引号包围。这些反过来被\作为\转义,否则“”将会是0长度字符串的末尾。

解决此问题的方法由注释建议,您可以通过列索引访问此方法或者通过重命名列,可以将其分配给的名字来完成。

names(results) <- c("name1", "name2", "name3")