2017-09-19 8 views
0

変数によってデータフレームを作成したいと思います。 var.1が見つからなかったので、変数のdata.frameを作成します。

p.1 <- .1 
p.2 <- .3 
p.3 <- .6 
l <- 1e2 

df <- data.frame(
    var.1 = 
    sample(0:1, l, prob = c(1 - p.1, p.1), replace = TRUE)) 

df <- df %>% 
    mutate(
    var.2 = ifelse(
    var.1 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.2, p.2), replace = TRUE)), 
    var.3 = ifelse(
    var.1 == 1 | var.2 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.3, p.3), replace = TRUE)) 
) 

それが1つのステップでDFを作成することですでもよりよいが、これは動作していない:私はこのdplyrスタイルのコードを使用することによって、これを達成することができます

最初のdfを空を作成
df <- data.frame(
    var.1 = 
    sample(0:1, l, prob = c(1 - p.1, p.1), replace = TRUE), 
    var.2 = ifelse(
    var.1 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.2, p.2), replace = TRUE) 
    ), 
    var.3 = ifelse(
    var.1 == 1 | var.2 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.3, p.3), replace = TRUE) 
    ) 
) 

別の試みは、いずれかの動作していない、これはmutate_implでエラーエラー(.dataセクション、ドット)をスローします。列var.1は、長さが0(行数)または1、いない100でなければなりません:

df <- data.frame() 
df <- df %>% 
    mutate(
    var.1 = 
     sample(0:1, l, prob = c(1 - p.1, p.1), replace = TRUE), 
    var.2 = ifelse(
     var.1 == 1, 0, 
     sample(0:1, l, prob = c(1 - p.2, p.2), replace = TRUE) 
    ), 
    var.3 = ifelse(
     var.1 == 1 | var.2 == 1, 0, 
     sample(0:1, l, prob = c(1 - p.3, p.3), replace = TRUE) 
    ) 
) 

実際、私は非常に多くの変数を持っており、私はこの作業にもっと経済的な解決策が必要です。

答えて

1

あなたは真の

df <- data.frame(
    var.1 = 
    sample(0:1, l, prob = c(1 - p.1, p.1), replace = TRUE)) %>% # create data frame with var.1 first, then mutate 
    mutate(
    var.2 = ifelse(
    var.1 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.2, p.2), replace = TRUE)), 
    var.3 = ifelse(
    var.1 == 1 | var.2 == 1, 0, 
    sample(0:1, l, prob = c(1 - p.3, p.3), replace = TRUE)) 
) 
+0

近かった........... – jaySf

関連する問題