R: Во фрейме данных я получаю ошибку, используя уровень факторной переменной. - PullRequest
1 голос
/ 04 мая 2020

Это работает, как ожидалось:

> sizes <- factor(c(1,2,3,7,9,2,1,3,7,3,9,2,3), levels = c(1,3,2,7,9),ordered=TRUE)
> sizes[2]
[1] 2
Levels: 1 < 3 < 2 < 7 < 9
> x=sizes[3]>sizes[2]
> x
[1] FALSE

Когда «sizes» является столбцом во фрейме данных, который загружается с помощью read.csv (), я получаю эту ошибку:

> A_Dataset <- read_csv("A_Dataset.csv", 
+     col_types = cols(A = col_integer(), 
+         B = col_integer(), sizes = col_factor(levels = c("1", 
+             "3", "2", "7", "9"))))
> A_Dataset$sizes = factor(A_Dataset$sizes, levels=c(1,3,2,7,9),ordered=TRUE)
> is.ordered(Week1_Dataset$sizes)
[1] TRUE
> x=A_Dataset[2,3]>Week1_Dataset[1,3]
Warning message:
In Ops.factor(left, right) : ‘>’ not meaningful for factors

Как математически сравнить значения размеров (по уровням) в кадре данных?

1 Ответ

0 голосов
/ 04 мая 2020

Причина, по которой это не работает, состоит в том, что вы сравниваете тибл с тиблом. Предложение прочитано книга R Хэдли Уикхема , где написано:

Подмножество тибла с помощью [всегда возвращает тиббл:

Мы можем попробовать пример:

sizes <- factor(c(1,2,3,7,9,2,1,3,7,3,9,2,3), levels = c(1,3,2,7,9),ordered=TRUE)
write.csv(data.frame(A=1:length(sizes),sizes=sizes),"test.csv",row.names=FALSE)

A_Dataset <- read_csv("test.csv", 
     col_types = cols(A = col_integer(), 
         sizes = col_factor(levels = c("1","3", "2", "7", "9"))))
A_Dataset$sizes = factor(A_Dataset$sizes, levels=c(1,3,2,7,9),ordered=TRUE)

Если посмотреть на класс:

class(A_Dataset[1,2])
[1] "tbl_df"     "tbl"        "data.frame"

Нельзя сравнивать data.frames, можно сделать:

class(A_Dataset$sizes[2])
[1] "ordered" "factor"

A_Dataset$sizes[2] > A_Dataset$sizes[1]
[1] TRUE

И это работает:

as.data.frame(A_Dataset[2,2]) >as.data.frame(A_Dataset[1,2])
     sizes
[1,]  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...