Преобразование матрицы от 288 * 2 до 48 * 6 - PullRequest
0 голосов
/ 28 марта 2019

У меня есть данные результатов в виде списка:

    "ID_station" "val"
"1" 1 405
"2" 1 202.5
"3" 1 11.911
"4" 1 101.25
"5" 1 81
"6" 1 1.7936
"7" 2 11.764
"8" 2 12.5
"9" 2 6.0606
"10" 2 400
"11" 2 12.12
"12" 2 1.844
"13" 4 480
"14" 4 12
"15" 4 43.636
"16" 4 160
"17" 4 96
"18" 4 1.726
"19" 5 11.73
"20" 5 12.272
"21" 5 11.25
"22" 5 270
"23" 5 6
"24" 5 2.05

Мне нужно получить результат в этом формате - первый столбец с ID станции и второй столбец составляют матрицу 6 * 48

1   405       202.5 11.911  101.25  81      1.793
2   11.7647   12.5  6.06    400     12.121  1.844
4   480       12    43.63   160      96     1.7263
5   11.73     12.27 11.25   270      6      2.05

Я пытался сделать что-то подобное и потерпел неудачу

vector_result=as.vector(unlist(result))
V_1=matrix(vector_result, ncol =12)

Ответы [ 2 ]

1 голос
/ 28 марта 2019
# Example data
df <- data.frame(ID = rep(1:3, each = 6), value = round(rnorm(18), 2))

# My solution
t(unstack(df, value ~ ID))

#     [,1]  [,2]  [,3]  [,4]  [,5] [,6]
# X1  0.25 -0.10  0.43 -0.75  0.33 0.08
# X2 -0.27  0.80  0.75  0.24 -0.03 2.85
# X3 -0.54 -1.33 -2.12  0.67  0.54 0.02
0 голосов
/ 28 марта 2019

Это работает здесь:

##assume test is structured like you example
Reshaped <- t(sapply(split(test,test$ID.station),function(df){return(df$val)}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...