2015-10-20 80 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