В этом случае равномерное распределение (что должно быть явным положительным соотношением между «лайками» и «долями») является подсказкой о том, что числовые данные могли быть непреднамеренно загружены как фактор.Другая подсказка заключается в том, что значения x и y меняются только в зависимости от количества уникальных значений, а не от диапазона базовых числовых данных. Нам нужно преобразовать уровни фактора (а не значения фактора), чтобы увидеть предполагаемые числа.Мы можем сделать это с помощью чего-то вроде as.numeric(as.character(x))
.
. Для примера предположим, что у нас были некоторые линейно коррелированные данные, подобные этому:
library(ggplot2); library(dplyr)
set.seed(42)
fake_data <- data.frame(x = runif(10000, 0, 1000000))
fake_data$y <- pmax(0, fake_data$x*rnorm(10000, 1, 2) + runif(10000, 0, 1000000))
ggplot(fake_data, aes(x,y)) + geom_point()
![enter image description here](https://i.stack.imgur.com/GJPub.png)
Если эти числовые данные были загружены как факторы (это легко сделать с помощью read.csv
, если термин stringsAsFactors = FALSE
не включен), это может выглядеть скорее так, но не слишкомотличается от данных в этом вопросе.Данные здесь читаются так, как если бы это были символьные данные, а затем преобразуются в коэффициент, который упорядочен в алфавитном порядке, с «10000» перед «2», потому что «1» предшествует «2».
fake_data_factor <- fake_data %>%
mutate(x = as.factor(as.character(x)),
y = as.factor(as.character(y)))
Значения x и y теперь имеют значения , связанные с их алфавитным порядком, в отличие от базовых уровней .R использует значения для сортировки или построения графика, а значения x с самыми низкими значениями в новых данных имеют уровней около 100 000 вместо около 0. ВВ приведенной ниже таблице 100 124 в строке 1 расположены в алфавитном порядке раньше, чем 10 058 в строке 8!
fake_data_factor %>%
arrange(x) %>%
head(8)
# x y
#1 100124.688120559 0
#2 100229.354342446 289241.187250382
#3 100299.560697749 232233.101769741
#4 100354.233058169 814492.563551191
#5 100364.253856242 1183870.56252858
#6 100370.0227011 1224652.83777805
#7 100461.616180837 1507465.73704898
#8 10058.1261795014 604477.823016668
ggplot(fake_data_factor, aes(as.numeric(x),as.numeric(y))) +
geom_point()
![enter image description here](https://i.stack.imgur.com/3nMmE.png)
Мы можем вернуться к намеченным числам попреобразование факторов в символ (который извлекает уровень каждого), а затем преобразование их в числовые.
fake_data_factor %>%
ggplot(aes(as.numeric(as.character(x)),as.numeric(as.character(y)))) +
geom_point()
![enter image description here](https://i.stack.imgur.com/p1E6U.png)