r - 使用 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 的原因是我想在下一步根据这个除法的结果对原始列进行更改。
解决方案
你可以直接做
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_df
frompurrr
purrr::map2_df(x[myvars], x[dvars], ~ .x/.y)
或与mapply
mapply("/", x[myvars], x[dvars])
推荐阅读
- php - Symfony - 从其他实体传递数据
- swift - 是否可以在 Firebase 数据库中进行软写入?
- linux - 如何使用 Linux shell 脚本自定义 Webconverger 的 ISO 映像?
- google-apps-script - Google 表格在多个电子表格上导入宏
- javascript - 访问对象的不可枚举属性
- wpf - 带有(ado.net 实体数据模型)的列表视图,我想在单击 btn 时更新列表视图
- typescript - ERROR 错误:未捕获(承诺中):错误:StaticInjectorError(AppModule)
- c++ - 如何解决包装代码中的“无效使用不完整类型”?
- linux - I/O 内存访问可以在 Linux (ARM) 下的 ISR 中使用吗?
- c++ - 确定执行循环所需的 CPU 时间