我有一个类型为double
的浮点数向量:
> typeof(globals$out$data$randrating)
[1] "double"
在我将其转换为表格后,相同的值会返回integer
:
> data_rating <- as.data.frame(table(globals$out$data$randrating))
> colnames(data_rating) <- c("rating", "freq")
> typeof(data_rating$rating)
[1] "integer"
要查看data_rating中的数据:
> data_rating
| rating | freq
1 | 4 | 312
2 | 7.1 | 324
3 | 8 | 340
4 | 8.5 | 962
5 | 8.7 | 1640
有什么想法吗?
答案 0 :(得分:1)
原因是第一列是factor
,我们使用typeof
看到的是整数表示。您可以使用class
查找实际的class
。
如果我们查看table
输出,则names
部分是character
向量。当我们使用data.frame
将其转换为as.data.frame
时,character
元素会转换为factor
,默认为stringsAsFactors=TRUE
data.frame
。如果我们使用as.data.frame(...., stringsAsFactors=FALSE)
,则会更改typeof
。
作为一个可重复的例子,
set.seed(24)
v1 <- sample(c(1:20, 14.5, 18.2), 200, replace=TRUE)
tbl <- table(v1)
str(tbl)
# 'table' int [1:22(1d)] 7 9 10 11 12 10 7 10 13 6 ...
#- attr(*, "dimnames")=List of 1
# ..$ v1: chr [1:22] "1" "2" "3" "4" ...
d1 <- as.data.frame(tbl)
str(d1)
# 'data.frame': 22 obs. of 2 variables:
# $ v1 : Factor w/ 22 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ Freq: int 7 9 10 11 12 10 7 10 13 6 ...
class(d1$v1)
#[1] "factor"
typeof(d1$v1)
#[1] "integer"
mode(d1$v1)
#[1] "numeric"
使用stringsAsFactors=FALSE
d2 <- as.data.frame(tbl, stringsAsFactors=FALSE)
class(d2$v1)
#[1] "character"
typeof(d2$v1)
#[1] "character"
mode(d2$v1)
#[1] "character"
前一个存储空间mode
为numeric
,此为character
。