2015-10-20 78 views
2

我试图创建一个函数,将识别基于ID号的重复样本(行),并创建一个新的列,它将写入重复样本的测试顺序(如果有的话) 。用户定义函数标记重复

重复样品将具有相同的ID,但将具有顺序的辅助ID。下面是我的意思的一个例子。

示例数据:

df <- data.frame(ID1=c(2528,2528,2528,2530,2533,2533), 
       ID2=c("G_54", "G_55", "G_53", "G_99", "G_252", "G_253"), 
       RESULT=c(.235, .237, .236, .325, .445, .446)) 
df 
# ID1 ID2 RESULT 
# 1 2528 G_54 0.235 
# 2 2528 G_55 0.237 
# 3 2528 G_53 0.236 
# 4 2530 G_99 0.325 
# 5 2533 G_252 0.445 
# 6 2533 G_253 0.446 

我想结果是这样的:

#expected output 
# ID1 ID2 RESULT RUN 
# 2528 G_54 0.235 RUN2 
# 2528 G_55 0.237 RUN3 
# 2528 G_53 0.236 RUN1 
# 2530 G_99 0.325 SINGLE 
# 2533 G_252 0.445 RUN1 
# 2533 G_253 0.446 RUN2 
+0

是您的数据真的在一个HTML表?我很困惑你的帖子。如果你想分享你的数据,也许阅读[如何创建一个可重现的例子]的建议(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example ) – MrFlick

+0

否 - 只是认为解释我正在使用的数据会更容易...将修改为放入R代码 – GK89

回答

2

使用dplyr:

library(dplyr) 

df %>% 
    group_by(ID1) %>% 
    arrange(ID1, ID2) %>% 
    mutate(RUN = row_number(), 
     N = n(), 
     RUN = ifelse(N == 1, "SINGLE", paste0("RUN", RUN))) %>% 
    select(-N) 

#result 
# ID1 ID2 RESULT RUN 
# 1 2528 G_53 0.236 RUN1 
# 2 2528 G_54 0.235 RUN2 
# 3 2528 G_55 0.237 RUN3 
# 4 2530 G_99 0.325 SINGLE 
# 5 2533 G_252 0.445 RUN1 
# 6 2533 G_253 0.446 RUN2