0

我正在使用 R 并且我有一个像这样的数据框(很多行)

 DATE TICKER PERMNO PERMCO   BIDLO ASKHI    PRC CFACPR
1 20060901   ALOG  14198    173 55.8112 57.59 56.440      1
2 20060905   ALOG  14198    173 55.0101 56.48 55.650      1
3 20060906   ALOG  14198    173 55.0200 56.53 55.380      1
4 20060907   ALOG  14198    173 55.1200 57.05 56.360      1
5 20060908   ALOG  14198    173 55.3180 56.98 55.345      1
6 20060911   ALOG  14198    173 54.0000 56.23 56.190      1

我正在尝试访问任何行的 TICKER 值。像这样

> data[1,]$TICKER

[1] ALOG
150 Levels:  ACTG ACTL AEIS ALOG ALSC ALTR AMCC AMK AMSC ANAD ARMH ARMHY ARXX ASTSF ASYS ATMI ATML AVNX AXTI BELFA BELFB BRCM CAMD CATT CBMX CECE ... ZRAN

为什么我得到低于实际值的 150 个级别。如何访问 TICKER 符号

4

2 回答 2

3

您获得低于结果水平的原因是因为 TICKER 被视为一个因素。Dirk 提供了一些建议,说明如何从一开始就防止这种情况发生,但您可以使用as.character

as.character(data[1, "TICKER"])

或者,如果您想将整个列更改为字符向量而不是一个因子,您可以执行类似的操作

data$TICKER <- as.character(data$TICKER)
于 2012-09-02T00:51:29.743 回答
2

使用stringsAsFactor=FALSE,作为 或 的选项,read.table()read.csv()作为全局设置。如果这样做,值将是字符串。

R> data <- read.table(textConnection(" DATE TICKER PERMNO PERMCO   BIDLO ASKHI    PRC CFACPR
1 20060901   ALOG  14198    173 55.8112 57.59 56.440      1
2 20060905   ALOG  14198    173 55.0101 56.48 55.650      1
3 20060906   ALOG  14198    173 55.0200 56.53 55.380      1
4 20060907   ALOG  14198    173 55.1200 57.05 56.360      1
5 20060908   ALOG  14198    173 55.3180 56.98 55.345      1
6 20060911   ALOG  14198    173 54.0000 56.23 56.190      1"), header=TRUE, stringsAsFactors=FALSE)
data <- read.table(textConnection(" DATE TICKER PERMNO PERMCO   BIDLO ASKHI    PRC CFACPR
+ 1 20060901   ALOG  14198    173 55.8112 57.59 56.440      1
+ 2 20060905   ALOG  14198    173 55.0101 56.48 55.650      1
+ 3 20060906   ALOG  14198    173 55.0200 56.53 55.380      1
+ 4 20060907   ALOG  14198    173 55.1200 57.05 56.360      1
+ 5 20060908   ALOG  14198    173 55.3180 56.98 55.345      1
+ 6 20060911   ALOG  14198    173 54.0000 56.23 56.190      1"), header=TRUE, stringsAsFactors=FALSE)
R> data[1,"TICKER"]
[1] "ALOG"
R> 
于 2012-09-02T00:47:48.260 回答