我有一个问题,我希望有人会帮我回答。我有一个由寄生虫和年份排序的数据集,看起来像这样(实际的数据集要大得多):
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
我想做的是,每年,我想选择寄生虫数量最多的2个样本,给我一个看起来像这样的输出:
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
我是整个编程的新手,仍然试图找到我的方式R.有人可以向我解释我将如何解决这个问题?非常感谢。
答案 0 :(得分:1)
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
是year
by=
值的子表
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
答案 1 :(得分:1)
这是一个R-base解决方案(如果您需要):
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))
希望有所帮助!