Ошибка "выбраны неопределенные столбцы" - Аккордовая диаграмма (округлить пакет) в R

Мне нужна помощь с сообщением об ошибке при использовании chordDiagram() функция от circlize пакет.

Я работаю с рыболовецкими уловами. Рыболовные суда начинают свое плавание в одном порту PORT_DE) и выгрузить добычу (в данном случае гребешки) в другой порт (порт посадки) PORT_LA). Я пытаюсь нарисовать диаграмму аккордов, используя circlize пакет для визуализации потока посадок между портами. У меня есть 161 уникальных портов и имена портов хранятся как character строки.

Прежде чем позвонить chordDiagram() функция для рисования диаграммы аккордов, я храню соответствующие столбцы в фиктивном объекте (m).

# Store relevant column
m <- data.frame(PORT_DE = VMS_by_trips$PORT_DE_Label, 
            PORT_LA = VMS_by_trips$PORT_LA_Label, 
            SCALLOP_W = VMS_by_trips$Trip_SCALLOP_W)

head(m)
# PORT_DE  PORT_LA SCALLOP_W
# 1  Arbroath Arbroath  2.147143
# 2  Eyemouth Aberdeen  8.791970
# 3    Buckie Aberdeen  2.025833
# 4  Montrose Aberdeen  8.268540
# 5  Aberdeen Aberdeen  1.358286
# 6 Peterhead Aberdeen  0.797500

Затем я создаю матрицу смежности, используя dcast() и переименовать строки.

require(reshape2)
m <- as.matrix(dcast(m, PORT_DE ~ PORT_LA, value.var = "SCALLOP_W", fun.aggregate = sum))
dim(m) #adjecency matrix represents port pairs
#[1] 153 138

row.names(m) <- m[,1]
m <- m[,2:dim(m)[2]]
class(m) <- "numeric"

Наконец, я вызываю функцию сюжета chordDiagram(),

library(circlize) 
chordDiagram(m) 

К сожалению, это приводит к сообщению об ошибке.

Error in `[.data.frame`(df, c(1, 2, 5)) : undefined columns selected

Если я заменю имена строк и столбцов числами, функция запустится, и вернется правильный график.

row.names(m) <- 1:153
colnames(m) <- 1:137

Есть идеи, как запустить функцию с реальными именами портов?

Я уже пытался удалить специальные символы, заменить " " пробелы с "_" подчеркивания, сохраните меньшее количество символов, оставьте только несколько пар портов. К сожалению, та же ошибка продолжает появляться. Любая помощь приветствуется.

Обратите внимание, что после публикации этого вопроса мне удалось создать необходимую визуализацию. Вот ссылка на другой связанный вопрос, который также включает в себя код для настройки различных параметров диаграммы аккордов.

Настройте highlight.sector() ширину и расположение - диаграмма аккордов (круговой пакет) в R

1 ответ

Решение

Благодаря @ZuguangGu, причиной сообщения об ошибке было NAs в именах моих колонок. Если вы удалите их в первую очередь, то диаграмма аккордов будет отображаться очень хорошо. Следуя той же записи, пожалуйста, смотрите ниже.

#create adjacency matrix
m <- data.frame(PORT_DE = VMS_by_trips$PORT_DE_Label, 
                PORT_LA = VMS_by_trips$PORT_LA_Label, 
                SCALLOP_W = VMS_by_trips$Trip_SCALLOP_W)


#Check for NA values in your dataset
which(is.na(m[, 1]))
which(is.na(m[, 2]))

#Remove the rows which have NA values, there will not be errors any more.
df = m
df = df[!(is.na(df[[1]]) | is.na(df[[2]])), ]

require(reshape2)
m <- dcast(df, PORT_DE ~ PORT_LA, value.var = "SCALLOP_W", fun.aggregate = sum)
row.names(m) <- m[,1]
m <- as.matrix(m[, -1])

# remove self-links
m2 = m
cn = intersect(rownames(m2), colnames(m2)) 
for(i in seq_along(cn)) {
  m2[cn[i], cn[i]] = 0
}

# Export 3 versions of the chord diagram in a PDF

library(circlize) 

pdf("test.pdf")

# Use all data
chordDiagram(m)
title("using all data")

#remove self-links
chordDiagram(m2)
title("remove self-links")

#here reduce = 0.01 means to remove ports which have capacity less than 0.01 of capacity of all ports.
chordDiagram(m2, reduce = 0.01)
title("remove self-links and small sectors")

dev.off()
Другие вопросы по тегам