2014-10-04 99 views
-1

Exctracting双打的向量我使用read.table()具有或不具有header=T这个问题,尝试从得到的data.frame提取与as.double(as.character())双打的载体(参见?factor)。的R - 从data.frame

但这只是如何我意识到我不明白R的逻辑。所以你不会看到例如read.table在下面的代码中,只有必要的部分。你能告诉我下列选项有什么区别?

  1. 随着header=T相当于:

    (a <- data.frame(array(c(0.5,0.5,0.5,0.5), c(1,4)))) 
    as.character(a) 
    # [1] "0.5" "0.5" "0.5" "0.5" 
    
  2. 没有header=T相当于:

    b <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4))) 
    (a <- b[2,]) 
    as.character(a) 
    # [1] "1" "1" "1" "1" 
    
    (a <- data.frame(a, row.names=NULL)) # now there's not even a visual difference 
    as.character(a) 
    # [1] "1" "1" "1" "1" 
    
+1

你处理'factor's。在您的'data.frame'步骤中添加'stringsAsFactors = FALSE'并进行比较。 – A5C1D2H2I1M1N2O1R2T1 2014-10-04 16:57:23

+0

使用'read.table'和变体时的'stringsAsFactors'转换是混淆的常见原因。与往常一样,在数据中使用'str'来准确理解您正在处理的内容可能非常有价值。一旦你意识到'stringsAsFactors'的参数,它就成为一个非常有用的工具。如果您选择'options(stringsAsFactors = FALSE)',您也可以在全局范围内设置该选项。 – 2014-10-04 17:04:38

+0

哇,谢谢。我会阅读一些因素。 – 9877126 2014-10-04 17:04:50

回答

0

的问题出在data.frame,其中的选项之一,stringsAsFactors默认设置设置为TRUE。这是您的方案中的一个问题,因为当您使用header = FALSE时,该行中字符值的存在将整个列强制转换为字符,然后转换为因子(除非您设置stringsAsFactors = FALSE)。

下面是一些例子玩:

## Two similar `data.frame`s -- just one argument different 

b <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4))) 
b2 <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4)), 
       stringsAsFactors = FALSE) 

## First with "b" 

as.character(b[2, ]) 
# [1] "1" "1" "1" "1" 

sapply(b[2, ], as.character) 
# X1 X2 X3 X4 
# "0.5" "0.5" "0.5" "0.5" 
as.matrix(b)[2, ] 
# X1 X2 X3 X4 
# "0.5" "0.5" "0.5" "0.5" 
as.double(as.matrix(b)[2, ]) 
# [1] 0.5 0.5 0.5 0.5 

## Now with "b2" 

as.character(b2[2, ]) 
# [1] "0.5" "0.5" "0.5" "0.5" 
as.double(as.character(b2[2, ])) 
# [1] 0.5 0.5 0.5 0.5 
+0

感谢您的回答。我现在在'read.table' /'colClasses'中看到这个假设(顺便提及),它是应该属于同一类的数据的*列*。有没有办法将其更改为行?你知道我怀疑它,但它可能很有趣。 (对于类似的假设,是否有很好的帮助?) – 9877126 2014-10-04 17:39:15

+0

@ 9877126,不是我所知道的。 'list's让你存储不同类型的信息。 (实际上,'data.frame'是一个特殊的'list'类型。) – A5C1D2H2I1M1N2O1R2T1 2014-10-04 17:46:05