Причина в том, что первый столбец 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
для этого.
Спасибо! Знаете ли вы после этого, как проверить, являются ли данные типа integer или float? Я столкнулся с чем-то вроде 'typeof (as.numeric (as.character (data_rating $ rating))', но он всегда возвращает 'double', даже если данные являются целыми числами. Мне нужно проверить, являются ли данные в' data_rating $ rating' имеют тип integer или float. –
@YohanObadia Вы можете использовать '? class' ie' class (10.1) # [1] "numeric" 'и' class (10L) # [1] "integer" ' – akrun
'> class (as.numeric (as.character (data_rating $ rating))) [1] "numeric" ' '> class (data_rating $ rating) [1] "factor" ' '> typeof (unclass (data_rating $) рейтинг)) [1] "integer" 'но они float ... –