Я пытаюсь создать матрицу из большого кадра данных.Вот пример фрейма данных
df <- data.frame(index=c("x","y","j","ww","rr","ff"),
a=c(1,3,3,5,1,6),
b=c(2,3,5,3,2,3),
c=c(3,2,4,5,6,10),
d =c("ha1","ha2","ha3","ha4","ha5","ha"))
> df
index a b c d
1 x 1 2 3 ha1
2 y 3 3 2 ha2
3 j 3 5 4 ha3
4 ww 5 3 5 ha4
5 rr 1 2 6 ha5
6 ff 6 3 10 ha
Матрица должна выглядеть следующим образом.
> matrix
a b c
ff 6 3 10
j 3 5 4
rr 1 2 6
ww 5 3 5
x 1 2 3
y 3 3 2
Итак, подход, который я использовал, заключается в том, чтобы сначала изменить структуру фрейма данных на что-то вроде этого, используяmelt
df1 <- reshape2::melt(data = df, id.vars = c("index","d"), variable.name = "colname", value.name = "value")
> df1
index d colname value
1 x ha1 a 1
2 y ha2 a 3
3 j ha3 a 3
4 ww ha4 a 5
5 rr ha5 a 1
6 ff ha a 6
7 x ha1 b 2
8 y ha2 b 3
9 j ha3 b 5
10 ww ha4 b 3
11 rr ha5 b 2
12 ff ha b 3
13 x ha1 c 3
14 y ha2 c 2
15 j ha3 c 4
16 ww ha4 c 5
17 rr ha5 c 6
18 ff ha c 10
А затем выполните acast
matrix <- acast(df1, index~colname, value.var="value")
Вышеописанный подход работает, но сейчас я имею дело с большим набором данных, и когда данные преобразуются с использованием melt (df1), они становятся действительнобольшой и падает.
Так есть ли какой-нибудь способ, которым я могу сделать это эффективно при создании матрицы из кадра данных df, даже без промежуточного шага.