Как я могу изменить таблицу данных по id, чтобы столбцы внутри одного и того же идентификатора были установлены рядом друг с другом? Следующий код в виде короткого примера ввода и желаемого выходаПереупорядочить DT по id, чтобы все разные значения помещались в столбцы друг рядом друг с другом
require(data.table)
set.seed(456)
DT <- data.table(id = c(1,1,1, 2,2, 3,3, 4,4,4, 5),
X = round(runif(11, 0, 1),2),
Y = round(runif(11, 5, 10)),
A = c(rep(9, 3), rep(10, 2), rep(11, 2), rep(12, 3), 13))
Input
DT
# id X Y A
# 1: 1 0.09 6 9
# 2: 1 0.21 9 9
# 3: 1 0.73 9 9
# 4: 2 0.85 8 10
# 5: 2 0.79 8 10
# 6: 3 0.33 9 11
# 7: 3 0.08 7 11
# 8: 4 0.29 9 12
# 9: 4 0.24 6 12
# 10: 4 0.39 6 12
# 11: 5 0.37 9 13
# ...
Я хочу что-то вроде этого: для каждого подмножества по ID: После того как все постоянные переменные (в пределах каждого id, здесь: A и id), поместите все разные переменные (внутри каждого идентификатора здесь: X- и Y-столбцы) в той же строке, создав новые столбцы (X -> X1, X2, X3, Y -> Y1, Y2, Y3) Вхождения по id различны и меняются в моем случае между 1 и 3, поэтому e отсутствующие значения для всех идентификаторов с вхождениями менее 3 должны быть заполнены NA
.
Желаемая выход
# id A X1 Y1 X2 Y2 X3 Y3
# 1 9 0.09 6 0.21 9 0.73 9
# 2 10 0.85 8 0.79 8 NA NA
# 3 11 0.33 9 0.08 7 NA NA
# 4 12 0.29 9 0.24 6 0.39 6
# 5 13 0.37 9 NA NA NA NA
# ...
Легко получить количество элементов в каждой подгруппе с DT[,.N, by = id]
, но я борюсь со следующими шагами. Конечно, количество столбцов и строк намного больше, поэтому я бы предпочел решения с меньшим количеством имен столбцов (но, конечно, где-то нужно определить константу и разные столбцы).
Ну, решение моего дубликата, по той причине, что я никогда бы не найти его, не зная, '' dcast'' исключение. – Phann
@Jaap Я думаю, что OP также попросил переупорядочить столбцы, в этом случае это было бы затруднительно из ссылки, которую вы обманули. – akrun
И еще одна разница между столбцом '' A'' (константа) рядом с '' id''. – Phann