【发布时间】:2016-04-05 17:42:45
【问题描述】:
我在 R 中重新塑造我的数据框时遇到了一些困难。我有 5 个人:A、B、C、D 和 E。有些人有 1 个观察值,有些有 2 个。我测量了 3 个值每个观察值:X、Y 和 Z。我想将我的数据框从长格式转换为宽格式,每个人生成一行,并生成两组标记为 X、Y 和 Z 的列。但是 ,我想以 X 的值为条件,使得具有最大值 X 的观察集首先出现。因此,对于给定的观察,X、Y 和 Z 的值必须保持组合在一起,但观察 1 或 2 的值是否首先出现取决于 X 的最大值。
df = data.frame(
indiv = c("A","A","B","C","C","D","D","E"),
observ = c(1,2,1,1,2,1,2,1),
X = c(rnorm(8, mean = 10, sd = 6)),
Y = c(rnorm(8, mean = 0, sd = 2)),
Z = c(rnorm(8, mean = 4, sd = 4))
)
indiv observ X Y Z
1 A 1 9.959043 1.785043 10.134511
2 A 2 14.122006 -2.257666 5.799366
3 B 1 11.562801 -1.394951 4.988923
4 C 1 12.955644 -4.330272 8.870165
5 C 2 13.582154 -1.727224 -7.5617
6 D 1 4.053437 1.815233 1.789157
7 D 2 12.990071 -1.989307 3.67696
8 E 1 2.820895 -3.754263 3.001725
下面是我希望宽数据框的样子。对于个体 A,X 在观察 2 中更大,因此一组值 (X,Y,Z) 首先出现。相比之下,对于个体 C 和 D,X 在观察 1 中更大,因此该集合首先出现。我认为它应该是 reshape 函数的一些变化,但我不确定如何以 X 的最大值为条件。提前谢谢!
indiv observ X Y Z observ X Y Z
1 A 2 18.797087 0.3247862 4.774446 1 8.547868 0.3203667 6.729975
2 B 1 1.646638 0.7986036 6.938825 NA NA NA NA
3 C 1 17.354905 -2.399272 8.357045 2 6.856093 0.6493722 2.420827
4 D 1 16.058101 -1.2370024 4.045489 2 7.641576 3.0820116 4.232615
5 E 1 13.625998 -0.1953445 -5.627932 NA NA NA NA
【问题讨论】:
-
请在发帖前使用
set.seed,以便重现。