You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中基于数据框另一列的公式创建新列

解决数据框逐行应用自定义公式的问题

首先注意:你用cbind创建数据框时,会把数值型的dog和cat列转成字符型,这会导致后续计算出错,先修正数据集的创建方式:

# 创建正确的数据集
dog <- c(1,1,1,1,0,2)
cat <- c(1,1,0,1,1,4)
formula <- c("dog","dog+cat","cat-dog","cat","cat-dog","dog")
have <- data.frame(dog, cat, formula, stringsAsFactors = FALSE)

下面提供三种可行的解决方案:

方法一:用dplyr逐行计算

通过rowwise()让mutate逐行处理,确保公式在当前行的变量环境下执行:

library(dplyr)

have <- have %>%
  rowwise() %>%
  mutate(output = eval(parse(text = formula))) %>%
  ungroup()

方法二:Base R逐行处理

用apply遍历每一行,把当前行转成列表作为环境传入eval:

have$output <- apply(have, 1, function(row) {
  eval(parse(text = row["formula"]), envir = as.list(row))
})

方法三:用purrr批量处理

利用pmap_dbl按行传递变量,直接执行公式:

library(purrr)

have$output <- pmap_dbl(have, function(dog, cat, formula) {
  eval(parse(text = formula))
})

执行后就能得到你想要的结果:

dog cat formula output
1   1   1     dog      1
2   1   1 dog+cat      2
3   1   0 cat-dog     -1
4   1   1     cat      1
5   0   1 cat-dog      1
6   2   4     dog      2

内容的提问来源于stack exchange,提问作者h09812349

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:20