2017-11-27 4 views
1

私は、低と高の2つの列を持つデータフレームを持っています。私は、dplyrを使用して、低い値と高い値(インクルードと等しい確率)の間で無作為に選択された値である新しい変数を作成したいと思います。私はseqは、スカラー引数を期待するので、私にエラーを与えるdplyr piplineでsampleとseqを使用するにはどうすればよいですか?

library(tidyverse) 

data_frame(low = 1:10, high = 11) %>% 
    mutate(rand_btwn = base::sample(seq(low, high, by = 1), size = 1)) 

を試してみました。

私はその後seq

seq2 <- Vectorize(seq.default, vectorize.args = c("from", "to")) 

data_frame(low = 1:10, high = 11) %>% 
    mutate(rand_btwn = base::sample(seq2(low, high, by = 1), size = 1)) 

のベクトル化バージョンを使用して再度試してみましたが、これはどちらか私に望ましい結果を与えるものではありません。 rowwise()パターンを回避するために

+0

'DATA_FRAMEを(低い= 1:10、高い= 11)%>%[ – bouncyball

+0

] @bouncyballそれは動作します。ありがとう! –

答えて

1

のように、私は通常、mutate()map()に好む:あなたのVectorize()アプローチはまた、作品

set.seed(123) 
data_frame(low = 1:10, high = 11) %>% 
    mutate(rand_btwn = map2_int(low, high, ~ sample(seq(.x, .y), 1))) 

set.seed(123) 
data_frame(low = 1:10, high = 11) %>% 
    mutate(rand_btwn = map_int(map2(low, high, seq), sample, size = 1)) 
# # A tibble: 10 x 3 
#  low high rand_btwn 
# <int> <dbl>  <int> 
# 1  1 11   4 
# 2  2 11   9 
# 3  3 11   6 
# 4  4 11  11 
# 5  5 11  11 
# 6  6 11   6 
# 7  7 11   9 
# 8  8 11  11 
# 9  9 11  10 
# 10 10 11  10 

または

sample_v <- Vectorize(function(x, y) sample(seq(x, y), 1)) 

set.seed(123) 
data_frame(low = 1:10, high = 11) %>% 
    mutate(rand_btwn = sample_v(low, high)) 
+0

これらはすばらしい解決策です。 'rowwise()'を避ける理由は何ですか? –

+1

'rowwise()'は不要なグループ化を作成し、 'do()'と一緒に使用することを意味します( 'help(" rowwise ")'通常、何かを行う方法がより明確になっているので、年に 'do()'を使います)。そう言われて、それは動作します。そして、あまり明確ではない。そして、私はすべての作品のためだ –

関連する問題