2017-12-23 14 views
0

投稿されたのと同じ質問がありますが、質問に回答がないままで、同じ問題が発生しています。dplyr関数がfalseを返すNAs

データのサンプルをhereに添付しました。

私が使っているRのバージョンは3.4.2で、dplyrのバージョンは0.7.4です。

問題が発生した場所のために今
#specify which species are predators (pp = 1) and prey (pp = 0) 
d1 = d1 %>% 
    group_by(sps) %>% #grouped by species 
    mutate(pp=ifelse(sps %in% c("MUXX", "MUVI","MEME"), 1,0)) #mutate to specify predators as 1 and prey as 0 

d1$datetime=strftime(paste(d1$date,d1$time),'%Y-%m-%d %H:%M',usetz=FALSE) #converting the date/time into a new format  

head(d1) #visualize the first few lines of the data 

d2 = d1 %>% filter(km %in% c("80")) #restricting the observations to just one location (km 80) 

(NAS):

d2 = d2 %>% mutate(prev = dplyr::lag(pp)) 
#when I look at the output I see the lag function isn't working (shown below) 

> d2 
# A tibble: 209 x 10 
# Groups: sps [10] 
    ID  date km culv.id type sps time pp   datetime prev 
<int>  <fctr> <dbl> <fctr> <fctr> <fctr> <fctr> <dbl>   <chr> <dbl> 
1  1 2012-06-19 80  A DCC MICRO 2:19  0 2012-06-19 02:19 NA 
2  2 2012-06-21 80  A DCC MUXX 23:23  1 2012-06-21 23:23 NA 
3  3 2012-07-15 80  A DCC MAMO 11:38  0 2012-07-15 11:38 NA 
4  4 2012-07-20 80  A DCC MICRO 22:19  0 2012-07-20 22:19  0 
5  5 2012-07-29 80  A DCC MICRO 23:03  0 2012-07-29 23:03  0 
6  8 2012-08-07 80  A DCC PRLO 2:04  0 2012-08-07 02:04 NA 
7  9 2012-08-08 80  A DCC MICRO 23:56  0 2012-08-08 23:56  0 
8 10 2012-08-09 80  A DCC PRLO 23:06  0 2012-08-09 23:06  0 
9 11 2012-08-13 80  A DCC MICRO 0:04  0 2012-08-13 00:04  0 
10 12 2012-08-13 80  A DCC MICRO 0:46  0 2012-08-13 00:46  0 

マイト

は、データをインポートした後...速度に を皆を取得するには、私はこれらの編集を行いますラグ機能が機能していない理由は誰にもありますか?

+2

'd2 <- d2 %>%ungroup()%>%mutate(prev = dplyr :: lag(pp))' – Mako212

+0

@ Mako212これで瞬時に問題が解決しました!ありがとうございました!!! 可能であれば、私の出力で起こったことに気付いたことを私に説明して、それが再び起こった場合にこの問題を解決できるようにしてください。 –

+0

答えとして私のコメントを追加しました。 – Mako212

答えて

4

以前の操作のいずれかで、group_by(sps)を指定した場合、そのグループは、ungroup()までデータフレームに接続されたままになります。いくつかの行レベルの操作はグループによって影響されませんが、集計関数、および複数の行の値に基づいて評価される関数は影響を受けません。

d2 <- d2 %>% ungroup() %>% mutate(prev = dplyr::lag(pp)) 

また、のように私は気づいた何:

  1. 私はあなたのヘッダーに見# Groups: sps [10]
  2. sps値の最初のインスタンスはNAですが、それぞれの2番目のインスタンスが正しく0
  3. です

しかし、前回の値がないため、lag()の最初の値は常にNAになります。これはgroup_by(sps)でも当てはまりますが、10個のNA値があることを意味します.1つは各因子レベルの最初のインスタンスです。グループ内で遅れた値が必要な場合は、ungroup()ではなく、これらのNAを作成する関数が正常に機能している必要があります。それらのNAsを0で置き換えるか、適切な場合は別の値に置き換えることができます。

+0

ご清聴ありがとうございます。 'mutate()'関数の前に示したように 'ungroup()'を指定すると、後で 'group_by(sps)'をもう一度使うことができますか?それは問題を引き起こすかもしれませんか? –

+1

@BlunderingEcologistあなたは絶対にそうすることができます。グループは計算された場所でのみ計算を実行します。グループを解除すると、再度グループ化するまで、グループ化されていない操作を好きなだけ実行できます。 – Mako212

関連する問題