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

如何从R中的重复测量中找到最终值?,r,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\u I)和最终质量(mass\u f)添加列。昨天我了解到,我可以使用plyr中的ddply添加初始质量列: sorted <- ddply(te

我在R中有这样安排的数据:

indv    time    mass
1         10    7
2          5    3
1          5    1
2          4    4
2         14    14
1         15    15
其中,
indv
是人群中的个体。我想为初始质量(
mass\u I
)和最终质量(
mass\u f
)添加列。昨天我了解到,我可以使用plyr中的
ddply
添加初始质量列:

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

然而,同样的方法不适用于寻找最终质量(
mass\u f
),因为我对每个个体都有不同数量的观察结果。当观测数量可能不同时,有人能提出一种寻找最终质量的方法吗?

您可以简单地使用
长度(质量)
作为最后一个元素的索引:

sorted2 <- ddply(sorted, .(indv), transform,
                 mass_i = mass[1], mass_f = mass[length(mass)])
除了行的顺序外,这与
sorted2

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

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

sorted2一旦有了这个表,它就非常简单:

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

t另外,如果有人能告诉我如何在stackoverflow上格式化表格,我将不胜感激!我已经看过了,但当我点击“编辑”这些帖子时,似乎找不到任何代码。谢谢通过按编辑窗口上方的{}按钮,或手动将每行缩进至少4个空格,将其格式化为代码。哇,非常感谢您的帮助。我知道这是一个愚蠢的问题,但我显然是R的新手。不过我真的很感谢你的帮助。:)这是可行的,但更一般的代码——不假设观察结果按时间排序——会找到每个人的最大时间,并用它来索引质量:df@mb3041023,这是真的。但是,当您已经知道列表已排序时,重复该工作就没有意义了。如果您正在处理未排序的数据,那么
which.max
which.min
组合将是合适的,绝对正确。我只想让读者能够清楚地阅读问题的标题和结尾文本,但可能会遇到DDDEP代码中间所隐含的警告。既然你的答案很好,我(笨拙地)试图让你在这一点上展开论述。:-)看起来你在阅读问题时犯了与我最初犯的相同的错误:应该找到的不是最大
质量
值,而是与最大
时间
相关的值,即最后一个值。明白了。然后可能
test$mass[其中(test$time==(tapply(test$time,test$ind,max))]
sorted2 <- ddply(sorted, .(indv), transform, mass_i = head(mass, 1), mass_f=tail(mass, 1))
t <- tapply(test$mass, test$ind, max)