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

基于列名匹配生成新列:优化cur_data()低效问题并适配pick()

解决方案

方法一:矩阵索引法(高效向量化,首选)

这种方法完全不用rowwise,靠矩阵索引直接提取对应值,效率拉满,适合大数据集:

df <- data.frame(time=c("M0","M12","M0","M0","M12"),
                 M0=c(1,2,4,5,1),
                 M12=c(8,5,9,2,1))

# 生成新列newd
df$newd <- df[cbind(seq_len(nrow(df)), match(df$time, colnames(df)))]

# 查看结果
df

运行结果:

time M0 M12 newd
1   M0  1   8    1
2  M12  2   5    5
3   M0  4   9    4
4   M0  5   2    5
5  M12  1   1    1

方法二:tidyverse风格(替代cur_data,用pick/符号引用)

如果习惯用dplyr的链式操作,可以用pick()替代弃用的cur_data(),或者直接用符号引用,两种写法都可以:

写法1:用pick()

library(dplyr)

df2 <- df %>%
  rowwise() %>%
  mutate(newd = pick(all_of(time)) %>% pull()) %>%
  ungroup()

df2

写法2:用sym()符号引用

df2 <- df %>%
  rowwise() %>%
  mutate(newd = !!sym(time)) %>%
  ungroup()

df2

两种写法的结果和你原来的一致,但pick()是当前推荐的函数,没有弃用问题。不过注意rowwise()本身还是逐行处理,大数据集下效率不如矩阵索引法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:52:38