从数据框的每个元素中提取前n个最大值的索引

3

我可以帮助您翻译有关IT技术的内容。以下是需要翻译的内容:

我有一个包含4个学生在线填写问卷调查时间戳的数据框。第1列是时间,第2列是学生的ID(ID:1,2,3,4)。下面是一个模拟数据框:

DF <- data.frame(cbind(Time=1:60, ID=sample(1:4, 60, replace=T)))

我想提取每个学生的前5个条目的索引,以提取入口时间戳。这应该返回一个包含20个值的数组(4名学生X前5个条目)。我尝试使用rank()、order()和ddply()的组合,但没有成功。有什么好的建议吗?谢谢!

请查看我对这个问题的回答:http://stackoverflow.com/questions/11109828/subsetting-a-dataframe-based-on-daily-maxima - Matthew Plourde
谢谢,@mplourde!我完全忽略了tail()可以指定自定义长度! - SeanM
1个回答

1

mplourde在评论中给出的答案很好,但您也可以使用plyr来实现:

library(plyr)
ddply(DF, .(ID), function(x) data.frame(Time_sorted=tail(sort(x$Time))))

以及 by 版本:

do.call(rbind, by(DF, DF$ID, function(x) tail(x[order(x$Time),])))

1
ddply(DF, .(ID), function(x) data.frame(Time_sorted=tail(sort(x$Time),5))) 如果你想要前五个条目和结果集的20。 - John
感谢@Justin,@John!我想对于前5个条目,应该使用head()而不是tail(),这将给出: ddply(DF, .(ID), function(x) data.frame(Time_sorted=head(sort(x$Time),5))) - SeanM
@SeanM 实际上,你需要 tail(..., 5)。默认情况下,sort 按升序排列。如果你使用 head,则需要在 sort 调用中添加 decreasing=TRUE - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接