Краткий ответ - факторы, преобразованные в их внутренние числовые коды.Это произошло во время cbind()
вызова:
R> set.seed(1)
R> dat <- data.frame(A = factor(sample(1:5, 10, rep = TRUE)),
+ B = factor(sample(100:200, 10, rep = TRUE)))
R> head(dat)
A B
1 2 120
2 2 117
3 3 169
4 5 138
5 2 177
6 5 150
R> str(dat)
'data.frame': 10 obs. of 2 variables:
$ A: Factor w/ 5 levels "1","2","3","4",..: 2 2 3 5 2 5 5 4 4 1
$ B: Factor w/ 9 levels "117","120","138",..: 2 1 5 3 7 4 6 9 3 8
R> cbind(name = dat$A, foo = dat$B)
name foo
[1,] 2 2
[2,] 2 1
[3,] 3 5
[4,] 5 3
[5,] 2 7
[6,] 5 4
[7,] 5 6
[8,] 4 9
[9,] 4 3
[10,] 1 8
Причина в том, что cbind()
создает матрицу, и именно здесь происходит преобразование.В этом случае было бы проще создать новый фрейм данных:
R> dat2 <- data.frame(name = dat$A, foo = dat$B)
R> dat2
name foo
1 2 120
2 2 117
3 3 169
4 5 138
5 2 177
6 5 150
7 5 172
8 4 200
9 4 138
10 1 178
, а не cbind()
, за которым следует пара вызовов as.data.frame()
.
Но реальный источникпроблема заключается в том, что числовые данные сохраняются как фактор в q2
.Как эти данные считывались или генерировались в R?Если они были зачитаны в R, то почему в итоге фактор?Обычно данные все числовые в столбце R будут читаться в значениях в виде чисел.Если в столбце данных есть что-то похожее на текст, оно будет преобразовано в фактор.Поэтому я постараюсь решить эту проблему - почему данные были q2
факторами - поскольку это может указывать на некоторые проблемы с чтением или генерацией данных, о которых вы не знаете.