【发布时间】:2018-01-09 10:38:42
【问题描述】:
我有一些数据,其中每个id 由不同的types 测量,这些types 可以有不同的值type_val。实测值为val。一个小的虚拟数据是这样的:
df <- data.frame(id=rep(letters[1:2],6),
type=c(rep('t1',6), rep('t2',6)),
type_val=rep(c(1,1,2,2,3,3),2),
val=1:12)
那么df就是:
id type type_val val
1 a t1 1 1
2 b t1 1 2
3 a t1 2 3
4 b t1 2 4
5 a t1 3 5
6 b t1 3 6
7 a t2 1 7
8 b t2 1 8
9 a t2 2 9
10 b t2 2 10
11 a t2 3 11
12 b t2 3 12
我需要传播/投射数据,以便每个 id 的 type 和 type_val 的所有组合都是按行排列的。我认为这一定是 pkgs reshape2 或 tidyr 的工作,但除了错误之外,我完全没有产生任何东西。
结果数据结构 - 有点多余 - 将是这样的(希望我做对了!)其中 type 对(由 type_val 的组合给出)是列 type_t1 和 type_t2 ,以及它们关联值(df 中的val)是val_t1 和val_t2 - 列名是任意的:
id type_t1 type_t2 val_t1 val_t2
1 a 1 1 1 7
2 a 1 2 1 9
3 a 1 3 1 11
4 a 2 1 3 7
5 a 2 2 3 9
6 a 2 3 3 11
7 a 3 1 5 7
8 a 3 2 5 9
9 a 3 3 5 11
10 b 1 1 2 8
11 b 1 2 2 10
12 b 1 3 2 12
13 b 2 1 4 8
14 b 2 2 4 10
15 b 2 3 4 12
16 b 3 1 6 8
17 b 3 2 6 10
18 b 3 3 6 12
更新
请注意 (@Sotos)
> spread(df, type, val)
id type_val t1 t2
1 a 1 1 7
2 a 2 3 9
3 a 3 5 11
4 b 1 2 8
5 b 2 4 10
6 b 3 6 12
不是所需的输出 - 它无法提供由 df 中的 type 和 type_val 组合定义的宽格式。
【问题讨论】:
-
我不确定我是否完全理解您所说的所有组合的意思。我认为这会让你开始:
tidyr::spread(df, type, val) -
spread的键 arg 是单个值。我需要为每组类型进行传播(即当 t1=1 和 t2=1 时,当 t1=1 和 t2=2 时等等)——顺便说一下,我的意思是组合。expand.grid或tidyr::expand的一些东西,尽管我没能完成这些工作。 -
啊……好吧,我明白了。有时间我会去看的
-
感谢!仍然按照@Antonius 的建议使用expand.grid 和合并
标签: r combinations reshape tidyr