首页 > 解决方案 > 使用 mutate_at 通过使用同一数据框中的其他列来创建新列

问题描述

好的,我遇到了一些应该很简单的问题。如果我有这样的数据框:

x <- data.frame(a = seq(1,3), b = seq(2,4), c = seq(3,5), d = seq(4,6), b2 = seq(5,7), c2 = seq(6,8), d2 = seq(7,9))

# a b c d b2 c2 d2
# 1 2 3 4 5  6  7
# 2 3 4 5 6  7  8
# 3 4 5 6 7  8  9 

我想使用 mutate_at 根据 b/b2、c/c2 等的结果创建新列。当我尝试时:

myvars <- c(2:4)
dvars <- c(5:7)
x <- x %>%
mutate_at(vars(myvars), funs('_new' = vars(myvars) / vars(dvars)))

我收到错误“评估错误:二进制运算符的非数字参数”。

我也尝试过使用mapply但无法使其工作。我想使用 mutate_at 的原因是我想在下一步根据这个除法的结果对原始列进行更改。

标签: rdplyr

解决方案


你可以直接做

x[myvars]/x[dvars]

#          b         c         d
#1 0.4000000 0.5000000 0.5714286
#2 0.5000000 0.5714286 0.6250000
#3 0.5714286 0.6250000 0.6666667

我不确定你是否可以这样做,mutate_at但是你可以使用map2_dffrompurrr

purrr::map2_df(x[myvars], x[dvars], ~ .x/.y)

或与mapply

mapply("/", x[myvars], x[dvars])

推荐阅读