【发布时间】:2019-06-25 11:34:49
【问题描述】:
对于从一个变量创建新变量的任何帮助,我将不胜感激。
具体来说,我需要帮助同时为每个ID 和E 的各个列创建一行,其中E 的每个新列,(即E1、E2、@ 987654328@) 包含E 每行ID 的值。我尝试这样做 melt 后跟 spread 但我得到了错误:
错误:行 (4, 7, 9), (1, 3, 6), (2, 5, 8) 的标识符重复
此外,我尝试了讨论here 和here 的解决方案,但这些解决方案不适用于我的情况,因为我需要能够为行(4、1、2)、(7、3)创建row identifiers , 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)
#expected 输出
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
提前感谢您的帮助。
【问题讨论】:
-
原来的问题已经回答了。请创建一个新问题,而不是使现有答案无效。
标签: r dataframe tidyverse tidyr reshape2