Как запустить функцию multivari (plotrix) с импортом данных из Excel

Вопрос или проблема

Я относительно нов в R и написал следующий скрипт с помощью RStudio, чтобы создать многомерный график. Когда я пытаюсь импортировать данные из Excel-таблицы как набор данных, я получаю сообщение об ошибке (= набор данных MVData) :

Ошибка в dat_split[[i]][fac1][!is.na(data[[var]]), ]:
! Нельзя подмножить строки с !is.na(data[[var]]).
✖ Логический индекс !is.na(data[[var]]) должен иметь размер 1 или 24, а не 48.

Тем не менее, когда я строю набор данных с помощью data.frame (= набор данных RRData), скрипт работает без проблем.


library(SixSigma)
library(dplyr)
library(plotrix)
library(readxl)

# Создание набора данных
waarde = c(0.68, -2.09, 1.74, 1.84, -1.7, 0.24, -0.6, -0.23, -0.63, -0.3, 0.75, -0.34, 0.1, 0.32, 0.35, 0.11, 0.31, 0.19, 0.05, -0.01, -0.06, 0.3, 0.33, 0.16, 5.06, 4.18, 5.14, 4.34, 4.29, 4.06, 6.07, 3.7, 6.31, 5.45, 4.72, 5.26, 3.31, 3.47, 3.12, 3.34, 3.27, 2.78, 3.59, 3.57, 3.88, 3.54, 3.67, 3.82)
proces = c('Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'Blank', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA', 'PSA')
type = c('Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Vierkant', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat', 'Plaat')
operator = c('BL', 'BL', 'BL', 'BL', 'BL', 'BL', 'JM', 'JM', 'JM', 'JM', 'JM', 'JM', 'BL', 'BL', 'BL', 'BL', 'BL', 'BL', 'JM', 'JM', 'JM', 'JM', 'JM', 'JM', 'BL', 'BL', 'BL', 'BL', 'BL', 'BL', 'JM', 'JM', 'JM', 'JM', 'JM', 'JM', 'BL', 'BL', 'BL', 'BL', 'BL', 'BL', 'JM', 'JM', 'JM', 'JM', 'JM', 'JM')
run = c('R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2')
ID = c('1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3')
meting = c('1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')
RRData = data.frame(waarde,proces, type, operator, run, ID, meting)
print(RRData)

# Импорт данных из Excel-таблицы
MVData <- read_excel("InputMultiVari.xlsx", 
          col_types = c("numeric", "text", "text","text", "text", "text", "text"))
print(MVData)

# Многомерный график
multivari("waarde", "ID", "operator", "run", "type",
          data = MVData,
          fac.cex = 1.5,
          main = "Многофункциональный график"
)

У кого-нибудь есть идея, как я могу это решить и использовать файл Excel для импорта?

Я пытался изменить типы переменных для различных столбцов, но это не изменило результат.

Спасибо

Результат от dput(MVData)

> dput(MVData)
structure(list(waarde = c(0.68, -2.09, 1.74, 1.84, -1.7, 0.24, 
-0.6, -0.23, -0.63, -0.3, 0.75, -0.34, 0.1, 0.32, 0.35, 0.11, 
0.31, 0.19, 0.05, -0.01, -0.06, 0.3, 0.33, 0.16, 5.06, 4.18, 
5.14, 4.34, 4.29, 4.06, 6.07, 3.7, 6.31, 5.45, 4.72, 5.26, 3.31, 
3.47, 3.12, 3.34, 3.27, 2.78, 3.59, 3.57, 3.88, 3.54, 3.67, 3.82
), proces = c("Blank", "Blank", "Blank", "Blank", "Blank", "Blank", 
"Blank", "Blank", "Blank", "Blank", "Blank", "Blank", "Blank", 
"Blank", "Blank", "Blank", "Blank", "Blank", "Blank", "Blank", 
"Blank", "Blank", "Blank", "Blank", "PSA", "PSA", "PSA", "PSA", 
"PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", 
"PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", "PSA", 
"PSA"), type = c("Vierkant", "Vierkant", "Vierkant", "Vierkant", 
"Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", 
"Vierkant", "Vierkant", "Plaat", "Plaat", "Plaat", "Plaat", "Plaat", 
"Plaat", "Plaat", "Plaat", "Plaat", "Plaat", "Plaat", "Plaat", 
"Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", 
"Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", "Vierkant", 
"Plaat", "Plaat", "Plaat", "Plaat", "Plaat", "Plaat", "Plaat", 
"Plaat", "Plaat", "Plaat", "Plaat", "Plaat"), operator = c("BL", 
"BL", "BL", "BL", "BL", "BL", "JM", "JM", "JM", "JM", "JM", "JM", 
"BL", "BL", "BL", "BL", "BL", "BL", "JM", "JM", "JM", "JM", "JM", 
"JM", "BL", "BL", "BL", "BL", "BL", "BL", "JM", "JM", "JM", "JM", 
"JM", "JM", "BL", "BL", "BL", "BL", "BL", "BL", "JM", "JM", "JM", 
"JM", "JM", "JM"), run = c("R1", "R1", "R1", "R2", "R2", "R2", 
"R1", "R1", "R1", "R2", "R2", "R2", "R1", "R1", "R1", "R2", "R2", 
"R2", "R1", "R1", "R1", "R2", "R2", "R2", "R1", "R1", "R1", "R2", 
"R2", "R2", "R1", "R1", "R1", "R2", "R2", "R2", "R1", "R1", "R1", 
"R2", "R2", "R2", "R1", "R1", "R1", "R2", "R2", "R2"), ID = c("1", 
"2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", 
"3", "1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3", 
"1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3", "1", 
"2", "3", "1", "2", "3", "1", "2", "3"), meting = c("1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -48L))

И результат identical(MVData, RRData)

> identical(MVData, RRData)
[1] FALSE

Ответ или решение

Для решения вашей проблемы с импортом данных из Excel в R и использованию пакета plotrix для построения MultiVari графика, вам необходимо учесть несколько ключевых факторов.

1. Проверка структуры данных

Ошибка, с которой вы столкнулись, возникает из-за несовпадения размеров данных. Это может быть связано с тем, как данные считываются из Excel и формируются в data.frame. Чтобы успешно импортировать данные, важно убедиться, что структура данных из Excel соответствует ожидаемой структуре.

Решение: Сначала убедитесь, что данные в Excel имеют правильные названия столбцов и что структура аналогична RRData. Например, посмотрите на названия столбцов, их типы и количество строк.

2. Импорт данных

Используемая функция read_excel() из пакета readxl позволяет импортировать данные, однако необходимо убедиться в правильности параметров. Например, вы можете получить лучшее представление о данных с помощью следующего кода:

library(readxl)
MVData <- read_excel("InputMultiVari.xlsx")
str(MVData)  # Проверка структуры данных

Убедитесь, что ваши данные имеют правильные типы, особенно в столбце waarde, который должен быть числовым. Если данные в Excel записаны как текст, необходимо преобразовать их в числовой формат.

MVData$waarde <- as.numeric(MVData$waarde)

3. Визуализация данных

Теперь, когда ваши данные импортированы и преобразованы, вы можете попытаться построить MultiVari график заново. Ключевой момент здесь — правильная передача name-параметров в функцию multivari(). Попробуйте следующий пример:

library(plotrix)
multivari("waarde", "ID", "operator", "run", "type",
          data = MVData,
          fac.cex = 1.5,
          main = "Multi-Vari Chart")

4. Проверка идентичности данных

Ваша проверка с помощью identical(MVData, RRData) вернула FALSE, что указывает на различия в двух датафреймах. Это может быть связано с отсутствием данных, несоответствием наименований столбцов или различиями в типах данных.

Решение: Убедитесь, что:

  • Столбцы имеют одинаковые названия.
  • Все типы столбцов совпадают.
  • Не осталось пропущенных значений.

Итог

Следуя вышеизложенным шагам, вы сможете успешно импортировать данные из Excel и создать MultiVari график в R. Убедитесь в синхронизации и совместимости структур данных, чтобы избежать дальнейших ошибок. Если проблемы сохраняются, обратите внимание на содержание ячеек и другие параметры Excel, которые могут повлиять на результат.

Если у вас остались вопросы, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...