2016-05-03 258 views
1

我有一個可重現的df,其中有個人重複採樣。對於每個樣本,我跟蹤樣品的採集和使用的介質(A或B)。根據數據框中的兩列創建一個新列

dat <- data.frame(IndID = factor(c(1,1,2,2,2,3,3)), 
      Order = c(1,2,1,2,3,1,2), 
      Media = factor(c("A", "B", "B","A","B","A", "A"))) 
dat 
    IndID Order Media 
1  1  1  A 
2  1  2  B 
3  2  1  B 
4  2  2  A 
5  2  3  B 
6  3  1  A 
7  3  2  A 

我想創建一個新列,其中包含媒體和一個數字,表示媒體中每個級別的採樣順序。換句話說,IndID和Media分組後,我想製作一個新的專欄來訂購樣品。對於每個人,如果兩個不同媒體(如IndID 1)中只有兩個樣本,則新值將爲「A1」和「B1」。如果來自同一媒體的兩個樣本,新值需要遵循採樣順序爲「B1」和「B2」。

鑑於上述數據,我試圖創建下面列

dat$WantThis <- c("A1", "B1","B1", "A1","B2", "A1", "A2") 

    IndID Order Media WantThis 
1  1  1  A  A1 
2  1  2  B  B1 
3  2  1  B  B1 
4  2  2  A  A1 
5  2  3  B  B2 
6  3  1  A  A1 
7  3  2  A  A2 

我一直在嘗試使用dplyr包,但不能連接上應該包括哪些內容作爲第二個參數來paste點。

dat2 <- as.data.frame(dat %>% group_by(IndID, Media) %>% mutate(MediaOrder = paste0(Media, ????))) 

在此先感謝。我歡迎任何建議。

+1

'DAT%>%GROUP_BY(的indid,媒體)%>%突變(WantThis = paste0(媒體,ROW_NUMBER()))'大概 –

+0

'DAT2 <- dat %>%GROUP_BY(的indid,媒體)%>%變異(WantThis = paste0(Media,row_number()))''生成'錯誤在rank(x,ties.method =「first」,na.last =「keep」): 參數「x」丟失, –

+1

你有哪個'dplyr'版本?它對我很好。你可以嘗試mutat(WantThis = paste0(Media,1:n()))'而不是 –

回答

2

如果你使用分組的行號,它應該得到你想要的。

library(dplyr) 

dat <- data.frame(IndID = factor(c(1,1,2,2,2,3,3)), 
        Order = c(1,2,1,2,3,1,2), 
        Media = factor(c("A", "B", "B","A","B","A", "A"))) 

res <- dat %>% 
    group_by(IndID, Media) %>% 
    mutate(count = row_number(), 
     WantThis = paste(Media,count,sep="")) 

#Source: local data frame [7 x 5] 
#Groups: IndID, Media [5] 
# 
# IndID Order Media count WantThis 
# (fctr) (dbl) (fctr) (int) (chr) 
#1  1  1  A  1  A1 
#2  1  2  B  1  B1 
#3  2  1  B  1  B1 
#4  2  2  A  1  A1 
#5  2  3  B  2  B2 
#6  3  1  A  1  A1 
#7  3  2  A  2  A2 
相關問題