2016-11-28 11 views
-1

ためのmutate内の「一致」を使用しようとすると、私は、id列とブールイベント列を持つデータフレームを持っている:私は、次の列を作成する各idに対してR:発行グループ化TBL

x <- data.frame(id = c(0,0,0,1,1,1,2,2,2,2,3,3,3), 
      event = c(F,F,F,T,F,F,F,T,F,F,F,T,T)) 

そのイベントが最初にある位置でそれに行くTRUE。だから、id 0のために何TRUEはありませんid 1するための第1の要素はので、私は、私は2を得るid 2ため、1を取得し、id 3のために、私はまた2を得るTRUEで、私はNAを得るようです。

予想される出力:

 id event event_num 
    (dbl) (lgl)  (int) 
1  0 FALSE  NA 
2  0 FALSE  NA 
3  0 FALSE  NA 
4  1 TRUE   1 
5  1 FALSE   1 
6  1 FALSE   1 
7  2 FALSE   2 
8  2 TRUE   2 
9  2 FALSE   2 
10  2 FALSE   2 
11  3 FALSE   2 
12  3 TRUE   2 
13  3 TRUE   2 

がしようとすると、私はコードを使用し、これを取得するには:

x %>% group_by(id) %>% mutate(event_num = match(TRUE, event)) 

しかし、これはNA代わりの2あり

 id event event_num 
    (dbl) (lgl)  (int) 
1  0 FALSE  NA 
2  0 FALSE  NA 
3  0 FALSE  NA 
4  1 TRUE   1 
5  1 FALSE   1 
6  1 FALSE   1 
7  2 FALSE  NA 
8  2 TRUE  NA 
9  2 FALSE  NA 
10  2 FALSE  NA 
11  3 FALSE   2 
12  3 TRUE   2 
13  3 TRUE   2 

すなわちid 2私に与えますが。

EDIT 更新dplyr 0.5.0に、それは我々がwhichを使用し、最初のappearenceを選択することができます

+0

を使用することができますか?私はあなたの状態が明確ではないと思う。 – akrun

+3

'match 'が別のパッケージによってマスクされているかどうかチェックする。コンソールで '> match'から何を得るのですか? –

+0

dplyrを0.5.0にアップデートしたときに動作し、以前は0.4.3 – user1165199

答えて

3

前に0.4.3を使用していた、動作します:

library(dplyr) 
x %>% group_by(id) %>% mutate(event_num = which(event)[1]) 
# Source: local data frame [13 x 3] 
# Groups: id [4] 
# 
#  id event event_num 
# <dbl> <lgl>  <int> 
# 1  0 FALSE  NA 
# 2  0 FALSE  NA 
# 3  0 FALSE  NA 
# 4  1 TRUE   1 
# 5  1 FALSE   1 
# 6  1 FALSE   1 
# 7  2 FALSE   2 
# 8  2 TRUE   2 
# 9  2 FALSE   2 
# 10  2 FALSE   2 
# 11  3 FALSE   2 
# 12  3 TRUE   2 
# 13  3 TRUE   2 

我々はまた、base::match(TRUE, event)を使用することができます。しかし、私は通常ブール要素とベクトルのマッチングを避けます。

+1

を使用していた可能性があります。あるいは、別のパッケージが 'match'をマスキングしています。彼らは 'base :: match'を試したいかもしれません –

-1

それが2である理由ID 3の、あなたは、3を取得した場合我々はまた、which.max

x %>% 
    group_by(id) %>% 
    mutate(event_num = which.max(event)*NA^all(!event)) 
    id event event_num 
# <dbl> <lgl>  <dbl> 
#1  0 FALSE  NA 
#2  0 FALSE  NA 
#3  0 FALSE  NA 
#4  1 TRUE   1 
#5  1 FALSE   1 
#6  1 FALSE   1 
#7  2 FALSE   2 
#8  2 TRUE   2 
#9  2 FALSE   2 
#10  2 FALSE   2 
#11  3 FALSE   2 
#12  3 TRUE   2 
#13  3 TRUE   2 
関連する問題