我有一个问题,希望有人能帮我回答。我有一个按寄生虫和年份排序的数据集,如下所示(实际数据集要大得多):
parasites year samples
1000 2000 11
910 2000 22
878 2000 13
999 2002 64
910 2002 75
710 2002 16
890 2004 29
810 2004 10
789 2004 9
876 2005 120
750 2005 12
624 2005 157 我想做的是,每年,我想选择两个寄生虫数量最多的样本,给我一个如下的输出:
parasites year samples
1000 2000 11
910 2000 22
999 2002 64
910 2002 75
890 2004 29
810 2004 10
876 2005 120
750 2005 12我对整个编程都很陌生,还在努力寻找我的方法。能不能有人向我解释一下我会怎么做呢?非常感谢。
发布于 2014-02-20 06:21:39
data.table怎么样?
parasites<-read.table(header=T,text="parasites year samples
1000 2000 11
910 2000 22
878 2000 13
999 2002 64
910 2002 75
710 2002 16
890 2004 29
810 2004 10
789 2004 9
876 2005 120
750 2005 12
624 2005 157")编辑-抱歉按寄生虫排序,而不是样本
require(data.table)
data.table(parasites)[,.SD[order(-parasites)][1:2],by="year"]注.SD是按by=设置的每个year值的子表。
year parasites samples
1: 2000 1000 11
2: 2000 910 22
3: 2002 999 64
4: 2002 910 75
5: 2004 890 29
6: 2004 810 10
7: 2005 876 120
8: 2005 750 12发布于 2014-02-20 06:32:59
下面是一个R基解决方案(如果需要的话):
data = data.frame("parasites"=c(1000,910,878,999,910,710,890,910,789,876,750,624),
"year"=c(2000,2000,2000,2002,2002,2002,2004,2004,2004,2005,2005,2005),
"samples"=c(11,22,13,64,75,16,29,10,9,120,12,157))
data = data[order(data$year,data$samples),]
data_list = lapply(unique(data$year),function(x) (tail(data[data$year==x,],n=2)))
final_data = do.call(rbind, Map(as.data.frame,data_list))希望这能帮上忙!
https://stackoverflow.com/questions/21899574
复制相似问题