Сложность с длинным широкоформатным длинным форматом в R - PullRequest
1 голос
/ 17 июня 2019

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

x<-c('A','B','C')
data<-expand.grid(x,x)
data$value<-c(1,2,3,2,1,4,3,4,1)
r.data<-reshape(data, idvar = "Var1", timevar = "Var2", direction = "wide")
colnames(r.data)<-c('Var','A','B','C')
rownames(r.data)<-r.data$Var
r.data$Var<-NULL

Затем я нашел нижнюю часть треугольника моих данных:

get_lower_tri<-function(cormat){
  cormat[upper.tri(cormat)] <- NA
  return(cormat)
}
r.data_lower<-get_lower_tri(r.data)

Но когда я использую melt(), у меня теперь только один столбец для переменной и значений, потому что нет идентификатора. Как бы я определил переменную id или исправил бы что-нибудь такое, чтобы оно было в стандартном расплавленном формате?

Ожидаемый:

Var1  Var2   value
 A     A       1
 B     A       2
 B     B       1
 C     A       3
 C     B       4
 C     C       1

1 Ответ

1 голос
/ 17 июня 2019

Можно преобразовать в matrix, а затем melt с опцией na.rm = TRUE

library(reshape2)
melt(as.matrix(r.data_lower), na.rm = TRUE)
...