簡體   English   中英

如何有條件地“變異” dplyr pipe 中的變量

[英]How can I conditionally "mutate" a variable inside a dplyr pipe

正如標題所說,我正在嘗試有條件地向我的 dplyr pipe 添加一個變異步驟。 但是我遇到了錯誤。 有沒有一個整潔的解決方案? 這是一個簡單的例子......

max.mpg <- 50
mtcars %>%
  {
    if(!!max.mpg > 10) mutate(foo = 1) else . 
  } 

但是上面會產生以下錯誤:

  no applicable method for 'mutate' applied to an object of class "c('double', 'numeric')"

我想要做的是向 mtcars 數據框添加一個新變量——但僅限於給定條件。 如果條件是FALSE ,那么我只想返回原始數據幀。

有趣的是,如果我將上述條件更改為FALSE (例如通過編寫if(.!max.mpg > 60) ),那么腳本運行良好。 因此,問題似乎確實存在於 mutate 動詞中。

最后,如果它對解決方案有很大影響,我將上述內容嵌入到自定義 function 中。 但我想如果我能在上面得到正確的簡單腳本,我可以把 rest 工作出來。

有什么建議么?

你不需要 tidyeval

library(dplyr)

max.mpg <- 50

mtcars %>% {if(max.mpg > 10) mutate(., foo=1) else .}

#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb foo
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4   1
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4   1
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1   1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1   1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2   1
...

mtcars %>% {if(max.mpg > 60) mutate(., foo=1) else .}  

#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
...

似乎您要評估的內容與數據集沒有任何關系,因為您正在定義 max.mpg 然后將其與常數進行比較。 我假設你想要做的是當 mpg 大於 max.mpg 時標記,在這種情況下這應該有效

library (dplyr)
max.mpg <- 50

mtcars %>% mutate(foo=if_else(mpg>max.mpg, true = 1, false = 0))

值為 50 時,所有行的評估結果都相同,如果將其更改為 mpg 范圍內的內容,則可以看到它有條件地評估。

max.mpg <- 20

mtcars %>% mutate(foo=if_else(mpg>max.mpg, true = 1, false = 0))

您可以使用 dplyr 中的 case_when() function。

圖書館(dplyr)
mtcar %>% mutate(foo = case_when(max.mpg > 10 ~ 1, TRUE~.)

暫無
暫無

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

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