2016-05-03 14 views
1

私は再現可能なdfを持っています。各サンプルについて、サンプルが採取された順序と使用された媒体(AまたはB)を追跡します。データフレーム内の2つの列に基づいて新しい列を作成する

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によるグループ分け、私はサンプルを注文する新しい列を作りたいと思う。各個人について、2つの異なるメディア(IndID1のような)に2つのサンプルしかない場合、新しい値は「A1」および「B1」となる。同じメディアから2つのサンプルがある場合、新しい値はサンプリング順序に従った順序で "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、メディア)%>%変異(x、ties.method = "first"、na.last = "keep"): 引数 "x"が欠落していて、デフォルトは存在しません。 'WantThis = paste0(media、row_number())) –

+1

あなたはどのdplyrバージョンを持っていますか?それは私にとってうまくいく。 'mutly(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