我想用pmap计算前3列的总和。
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我知道如何用rowwise或RowSums来实现它,但是我想要一个pmap的解决方案。
发布于 2022-10-28 10:54:51
pmap解决方案将是:
mtcars %>%
mutate(new = pmap(., ~ sum(..1, ..2, ..3)))或者,海事组织稍微好一点:
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))发布于 2022-10-28 11:12:27
为什么%>%会发生突变(new=pmap(选择(,1:3),~sum(.)失败?
在您的代码中,sum(.)等于sum(..1)。它只使用第一个变量,但是如果您想在函数调用中使用所有的3个变量,您可以将其修改为:
mtcars %>% mutate(new = pmap(select(., 1:3), ~ sum(c(...))))只需将.替换为c(...)即可。
发布于 2022-10-28 10:57:12
我知道你说过你想要一个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://stackoverflow.com/questions/74234246
复制相似问题