2016-06-20 9 views
1

私は、dplyr rowwise mutateとカスタム関数を使用して1つの列に結合したい2つの列を持つデータセットを持っています。特定のパターンに一致する2番目の行(最初の行または後続の行ではない)では、不思議なことに、NAを戻り値として取得します。dplyr rowwise mutate with custom function returns予期しない戻り値なし

my.func <- function(alpha, beta) { 
    if(!is.na(beta) & beta) { 
    return("c") 
    } else if(is.na(alpha)) { 
    return(as.character(NA)) 
    } else if (alpha == "a") { 
    return("a") 
    } else if (alpha == "b") { 
    return("b") 
    } else { 
    return(as.character(NA)) 
    } 
} 

tmp <- data.frame(obs = 1:7, 
        dt = c('2016-03-15 17:35:46','2016-03-15 18:45:47','2016-03-15 19:22:17','2016-03-15 19:23:45','2016-03-15 20:21:55','2016-03-15 21:20:10','2016-03-15 22:18:34'), 
        one = c(NA,"a","a","a","b","a","b"), two = c(NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)) 

tmp2 <- tmp %>% rowwise() %>% mutate(three = my.func(one, two)) 

これは正確に同じ入力を持つ上記列のため、それは「A」をもたらし行3、列3でNAになる:次の例です。

+0

は、あなたが「3」のrownameと第三印刷行または列を意味しています? rownameが "1"の行は、実行時の唯一のNA値であり、完全に期待しています。 (そして私はあなたが5列目を参照していると思う)。バージョンチェックの時間? –

+0

私はdplyrバージョン0.4.3.9001を持っています –

+0

私はこれについて本当にpuzzeldです。 'mapply(my.func、tmp $ one、tmp $ two)'は正しい結果を提供します。そして、もしあなたが最初の 'NA'を変更するなら、それは正しいでしょう。それは' rowwise() 'と何か関係があるかもしれません。 – Alex

答えて

-1

あなたのコードが動作しない理由を私は正確に理解していないが、次のあなたが期待するものを行うようだ:

tmp2 <- tmp %>% mutate(three = mapply(my.func, one, two)) 

>tmp2 

    obs     dt one two three 
1 1 2016-03-15 17:35:46 <NA> NA <NA> 
2 2 2016-03-15 18:45:47 a FALSE  a 
3 3 2016-03-15 19:22:17 a FALSE  a 
4 4 2016-03-15 19:23:45 a FALSE  a 
5 5 2016-03-15 20:21:55 b FALSE  b 
6 6 2016-03-15 21:20:10 a TRUE  c 
7 7 2016-03-15 22:18:34 b FALSE  b 
関連する問題