我想將前 3 列的總和用pmap.
library(tidyverse)
mtcars %>%
mutate(new = pmap(select(., 1:3), ~ sum(.))) # FAILS
mtcars %>%
mutate(new = pmap(., ~ sum(.[1:3]))) # FAILS
mpg cyl disp hp drat wt qsec vs am gear carb new
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 NA
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 NA
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 NA
我知道如何使用rowwiseorRowSums但我想要使用pmap.
uj5u.com熱心網友回復:
一個pmap解決方案是:
mtcars %>%
mutate(new = pmap(., ~ sum(..1, ..2, ..3)))
或者,稍微好一點的 IMO:
mtcars %>%
mutate(new = pmap(select(., 1:3), sum))
mtcars %>%
mutate(new = pmap(select(., 1:3), ~ sum(...)))
或者,事件更好,通過結合across:
mtcars %>%
mutate(new = pmap(across(1:3), sum))
uj5u.com熱心網友回復:
為什么 mtcars %>% mutate(new = pmap(select(., 1:3), ~ sum(.))) 失敗?
在您的代碼sum(.)中等于sum(..1). 它只使用第一個變數,但如果您想在函式呼叫中使用所有 3 個變數,您可以將其修改為:
mtcars %>% mutate(new = pmap(select(., 1:3), ~ sum(c(...))))
簡單地替換.就c(...)可以了。
uj5u.com熱心網友回復:
我知道你說過你想要一個pmap解決方案,但我最喜歡的避免非常慢rowwise的方法是結合across和apply:
mtcars |>
mutate(new = apply(across(1:3), 1, sum))
mpg cyl disp hp drat wt qsec vs am gear carb new
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 187.0
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 187.0
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 134.8
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 285.4
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 386.7
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 249.1
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522773.html
