Добавление факторных баллов в набор данных в R с помощью cbind

У меня возникают трудности при добавлении факторных баллов к исходному набору данных. Это совсем не сложная процедура, как описано здесь. Однако в моем случае я получаю следующую ошибку в приведенном ниже коде:

fa <- factanal(data, factors=2, rotation="promax", scores="regression")

data <- cbind(data, fa$scores)
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 889, 851

Не было бы удивительно получить эту ошибку, если номера строк действительно отличались, но когда я набираю "fa$scores" и нажимаю ввод, R отображает все 889 строк. Функция dim по-прежнему возвращает 851:

dim(fa$scores)
[1] 851   2

Не могли бы вы уточнить для меня, почему я получаю эту ошибку, и, если возможно, что я могу сделать, чтобы успешно добавить коэффициенты к данным?

Спасибо!

1 ответ

Решение

fa$scores возвращает матрицу с именами строк, которые можно использовать для объединения / объединения данных.

Во-первых, убедитесь, что data имеет имена строк. Если нет, дайте ему пустые имена, такие как:

rownames(data) <- 1:nrow(data)

Тогда беги fa <- factanal(...)и конвертировать fa$scores к кадру данных факторных баллов. Например,

fs <- data.frame(fa$scores)

Затем добавьте rowname столбец как ваши исходные данные и fs:

data$rowname <- rownames(data)
fs$rowname   <- rownames(fs)

Затем оставляем соединение с данными (используя пакет dplyr):

library(dplyr)
left_join(data, fs, by = "rowname)
Другие вопросы по тегам