簡體   English   中英

通過在向量上應用 mutate 來創建多個新列(理想情況下是 tidyverse)?

[英]Make multiple new columns (ideally tidyverse) by applying mutate across a vector?

我正在嘗試在一些貝葉斯統計數據中模擬線性回歸的數據集。

顯然,總體公式是 Y = A + BX 我已經模擬了 A 和 B 的各種值,使用

A <- rnorm(10,0,1)
B <- rnorm(10,0,1)
#10 Random draws from a normal distribution for the values of each of A and B

我設置了 X 的可能值列表

stuff <- tibble(x  = seq(130,170,10)) %>%
#Make table for possible values of X between 130>170 in intervals of 10
mutate(Y = A + B*x)
Make new value which is A plus B*each value of X

當我在 A & B 中只有 1 個值時(即如果我做A <- rnorm(1,0,1) ),這工作正常但顯然當 A & B 的長度 > 1 時它不起作用

我想弄清楚如何為我們做一些類似的事情

mutate(Y[i] = A[i] + B[i]*x

產生 10 個新列 Y1>Y10

歡迎任何建議

這就是我會如何做我認為你想要的。 我會開始很長,然后轉換為寬...

library(tidyverse)

set.seed(123)

df <- tibble() %>% 
        expand(
          nesting(
            ID=1:10,
            A=rnorm(10,0,1),
            B=rnorm(10,0,1)
          ),
          X=seq(130,170,10)
        ) %>% 
        mutate(Y=A + B*X)
df
# A tibble: 50 × 5
      ID      A      B     X     Y
   <int>  <dbl>  <dbl> <dbl> <dbl>
 1     1 -1.07   0.426   130  54.4
 2     1 -1.07   0.426   140  58.6
 3     1 -1.07   0.426   150  62.9
 4     1 -1.07   0.426   160  67.2
 5     1 -1.07   0.426   170  71.4
 6     2 -0.218 -0.295   130 -38.6
 7     2 -0.218 -0.295   140 -41.5
 8     2 -0.218 -0.295   150 -44.5
 9     2 -0.218 -0.295   160 -47.4
10     2 -0.218 -0.295   170 -50.4
# … with 40 more rows

現在,轉向寬...

df %>% 
  pivot_wider(
    names_from=ID,
    values_from=Y,
    names_prefix="Y",
    id_cols=X
  )
# A tibble: 5 × 11
      X    Y1    Y2    Y3    Y4    Y5    Y6    Y7     Y8    Y9   Y10
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl>
1   130  54.4 -38.6  115.  113.  106.  87.8  72.8  -7.90 -40.9 -48.2
2   140  58.6 -41.5  124.  122.  114.  94.7  78.4  -8.51 -44.0 -52.0
3   150  62.9 -44.5  133.  131.  123. 102.   83.9  -9.13 -47.0 -55.8
4   160  67.2 -47.4  142.  140.  131. 108.   89.5  -9.75 -50.1 -59.6
5   170  71.4 -50.4  151.  149.  139. 115.   95.0 -10.4  -53.2 -63.4

此時您已經丟失了 A 和 B,因為您需要另外 10 列來存儲原始 A 和另外 10 列來存儲原始 B。

就個人而言,我可能會堅持使用長格式,因為這很可能會使您未來的工作流程更輕松。 我可以保留A和B。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM