Буду признателен за любую помощь в создании новых переменных из одной переменной.
В частности, мне нужна помощь для одновременного создания одной строки для каждого ID
и различных столбцов E
, где каждый из новыхстолбцы E
, то есть E1
, E2
, E3
) содержат значения E
для каждой строки ID
.Я попытался сделать это, за которым melt
, за которым следует spread
, но я получаю ошибку:
Ошибка: дублирующиеся идентификаторы для строк (4, 7, 9), (1, 3, 6), (2, 5, 8)
Кроме того, я попробовал обсуждаемые решения здесь и здесь , но они не сработали для моего случая, потому что мне нужноиметь возможность создавать row identifiers
для строк (4, 1, 2), (7, 3, 5) и (9, 6, 8).То есть E
для строк (4, 1, 2) должно быть названо E1
, E
для строк (7, 3, 5) должно быть названо E2
, E
для строк (9, 6, 8) должно быть названо E3
и т. Д.
# data
dT<-structure(list(A = c("a1", "a2", "a1", "a1", "a2", "a1", "a1",
"a2", "a1"), B = c("b2", "b2", "b2", "b1", "b2", "b2", "b1",
"b2", "b1"), ID = c("3", "4", "3", "1", "4", "3", "1", "4", "1"
), E = c(0.621142094943352, 0.742109450696123, 0.39439152996948,
0.40694392882818, 0.779607277916503, 0.550579323666347, 0.352622183880119,
0.690660491345867, 0.23378944873769)), class = c("data.table",
"data.frame"), row.names = c(NA, -9L))
# моя попытка
A B ID E
1: a1 b2 3 0.6211421
2: a2 b2 4 0.7421095
3: a1 b2 3 0.3943915
4: a1 b1 1 0.4069439
5: a2 b2 4 0.7796073
6: a1 b2 3 0.5505793
7: a1 b1 1 0.3526222
8: a2 b2 4 0.6906605
9: a1 b1 1 0.2337894
aTempDF <- melt(dT, id.vars = c("A", "B", "ID")) )
A B ID variable value
1: a1 b2 3 E 0.6211421
2: a2 b2 4 E 0.7421095
3: a1 b2 3 E 0.3943915
4: a1 b1 1 E 0.4069439
5: a2 b2 4 E 0.7796073
6: a1 b2 3 E 0.5505793
7: a1 b1 1 E 0.3526222
8: a2 b2 4 E 0.6906605
9: a1 b1 1 E 0.2337894
aTempDF%>%spread(variable, value)
Error: Duplicate identifiers for rows (4, 7, 9), (1, 3, 6), (2, 5, 8)
# ожидаемый результат
A B ID E1 E2 E3
1: a1 b2 3 0.6211421 0.3943915 0.5505793
2: a2 b2 4 0.7421095 0.7796073 0.6906605
3: a1 b1 1 0.4069439 0.3526222 0.2337894
Заранее благодарен за любую помощь.