3

で使用しようとしてrepいますdplyrが、なぜ機能しないのか完全にはわかりません。

私のデータは次のようになります。私が望むのは、単純dayweeknfor eachを繰り返すことですid

head(dt4)

   id  dayweek n
1  1   Friday 3
2  1   Monday 3
3  1 Saturday 3
4  1   Sunday 3
5  1 Thursday 3
6  1  Tuesday 3

私がやろうとしているのは、dplyrフロー内のこれです

cbind(rep(dt4$id, dt4$n), rep(as.character(dt4$dayweek), dt4$n) ) 

を与える

    [,1] [,2]    
[1,] "1"  "Friday"
[2,] "1"  "Friday"
[3,] "1"  "Friday"
[4,] "1"  "Monday"
[5,] "1"  "Monday"
[6,] "1"  "Monday"

このコードが機能しない理由がわかりません

dt4 %>% 
  group_by(id) %>% 
  summarise(rep(dayweek, n))

Error: expecting a single value

誰かがこれで私を助けてくれますか?

データ

dt4 = structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), dayweek = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L), .Label = c("Friday", "Monday", "Saturday", "Sunday", 
"Thursday", "Tuesday", "Wedesnday"), class = "factor"), n = c(3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3)), class =     "data.frame", .Names = c("id", 
"dayweek", "n"), row.names = c(NA, -21L))
4

2 に答える 2

4

と同じ結果を得るにはcbind、 を使用できますdo。@DavidArenburgが述べたように、summarise各グループの組み合わせごとに単一の値/行を出力しますが、使用mutateすると同じ数の行で出力が得られます。しかし、ここでは、環境内で実行できる別の操作を行っていdoます。コード.内の はデータセットを示します。から「id」列を抽出する場合は、またはdt4を使用できます。をに置き換えます。dt4$iddt4[['id']]dt4.

library(dplyr)
dt4 %>% 
    group_by(id) %>%
    do(data.frame(id=.$id, v1=rep(.$dayweek, .$n)))
#Source: local data frame [63 x 2]
#Groups: id

#  id       v1
#1   1   Friday
#2   1   Friday
#3   1   Friday
#4   1   Monday
#5   1   Monday
#6   1   Monday
#7   1 Saturday
#8   1 Saturday
#9   1 Saturday
#10  1   Sunday
#.. ..      ...

または、@Frank のコメントに基づく別のオプションは、rep内部から生成された行インデックスsliceselect保持する必要がある列を指定することです。

dt4 %>%
     slice(rep(1:n(),n)) %>%
     select(-n)
于 2015-08-23T12:58:56.280 に答える