如何从R中的重复测量中找到最终值?

时间:2012-11-15 20:00:26

标签: r

我在R:

中安排了这样的数据
indv    time    mass
1         10    7
2          5    3
1          5    1
2          4    4
2         14    14
1         15    15

其中indv是人口中的个体。我想添加初始质量(mass_i)和最终质量(mass_f)的列。我昨天了解到,我可以使用plyr中的ddply添加初始质量列:

sorted <- ddply(test, .(indv, time), sort)
sorted2 <- ddply(sorted, .(indv), transform, mass_i = mass[1])

给出了如下表格:

   indv mass time mass_i
1    1    1    5      1
2    1    7   10      1
3    1   10   15      1
4    2    4    4      4
5    2    3    5      4
6    2    8   14      4
7    2    9   20      4

然而,同样的方法不适用于找到最终质量(mass_f),因为我对每个人的观察数量不同。当观察的数量可能有所不同时,是否有人可以建议找到最终质量的方法?

3 个答案:

答案 0 :(得分:0)

您可以简单地使用length(mass)作为最后一个元素的索引:

sorted2 <- ddply(sorted, .(indv), transform,
                 mass_i = mass[1], mass_f = mass[length(mass)])

正如mb3041023所建议并在下面的评论中讨论的那样,您可以在不对数据框进行排序的情况下获得类似的结果:

ddply(test, .(indv), transform,
      mass_i = mass[which.min(time)], mass_f = mass[which.max(time)])

除了行的顺序,这与sorted2相同。

答案 1 :(得分:0)

您可以使用tail(mass, 1)代替mass[1]

sorted2 <- ddply(sorted, .(indv), transform, mass_i = head(mass, 1), mass_f=tail(mass, 1))

答案 2 :(得分:0)

有了这张桌子,就很简单了:

t <- tapply(test$mass, test$ind, max)

这会为您提供一个数组ind.作为namesmass_f作为值。