gpt4 book ai didi

r - mutate_at 有两组变量

转载 作者:行者123 更新时间:2023-12-04 12:38:04 26 4
gpt4 key购买 nike

我刚问了a question about generating multiple columns at once with dplyr ,我是个笨蛋,把问题简单化了,还有另一个问题。我想找到一种 dplyr 方法,用于根据其他列动态生成列。

  cols <- c("x", "y")
foo <- c("a", "b")
bar <- c("c", "d")
df <- data.frame(a = 1, b = 2, c = 10, d = 20)
df[cols] <- df[foo] * df[bar]

在我的问题的第一次迭代中,我只包含一组先前定义的列,因此以下方法有效:

df %>%
mutate_at(vars(foo), list(new = ~ . * 5)) %>%
rename_at(vars(matches('new')), ~ c('x', 'y'))

但是,正如前几行代码所建议的,我想将现有的两个列相乘,但我不知道该怎么做。我试过:

df %>%
mutate_at(c(vars(foo), vars(bar)),
function(x,y) {x * y})

返回错误:

Error in (function (x, y)  : argument "y" is missing, with no default

是否可以通过 mutate_at 引用多组列以相互使用?

最佳答案

既然你想使用两列,我认为 purrr::map2 是可以使用的函数:

library(purrr)
library(dplyr)

map2(foo, bar, ~ df[[.x]] * df[[.y]]) %>%
set_names(cols) %>%
bind_cols(df, .)

#> a b c d x y
#> 1 1 2 10 20 10 40

关于r - mutate_at 有两组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com