首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件选择观测值取决于分组变量

根据条件选择观测值取决于分组变量
EN

Stack Overflow用户
提问于 2014-02-20 06:07:01
回答 2查看 540关注 0票数 1

我有一个问题,希望有人能帮我回答。我有一个按寄生虫和年份排序的数据集,如下所示(实际数据集要大得多):

代码语言:javascript
复制
    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  

我想做的是,每年,我想选择两个寄生虫数量最多的样本,给我一个如下的输出:

代码语言:javascript
复制
    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

我对整个编程都很陌生,还在努力寻找我的方法。能不能有人向我解释一下我会怎么做呢?非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 06:21:39

data.table怎么样?

代码语言:javascript
复制
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")

编辑-抱歉按寄生虫排序,而不是样本

代码语言:javascript
复制
require(data.table)
data.table(parasites)[,.SD[order(-parasites)][1:2],by="year"]

.SD是按by=设置的每个year值的子表。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-02-20 06:32:59

下面是一个R基解决方案(如果需要的话):

代码语言:javascript
复制
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))

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21899574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档