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

如何在dtplyr中使用rowwise实现行运算?

解决方案:dtplyr实现行均值的正确方式

dtplyr的lazy_dt对象不支持rowwise()方法,因为它底层基于data.table,行操作更适合用向量化函数实现,而非分组式的rowwise。以下是两种高效的实现方式:

方法一:使用rowMeans()(推荐,效率最高)

直接调用向量化的rowMeans()函数,配合pick()选择目标列,dtplyr会自动将其翻译为高效的data.table操作:

library(dtplyr)
library(dplyr)

# 构造数据
df <- tibble(x = runif(6), y = runif(6), z = runif(6))
df.dt <- lazy_dt(df)

# 计算行均值
result <- df.dt %>%
  mutate(m = rowMeans(pick(x, y, z))) %>%
  as_tibble() # 可选,转换为tibble格式输出

print(result)

方法二:使用c_across()(贴近原写法)

如果希望保留类似mean(c(x,y,z))的逻辑,可以用c_across()替代直接列拼接,无需rowwise():

library(dtplyr)
library(dplyr)

df <- tibble(x = runif(6), y = runif(6), z = runif(6))
df.dt <- lazy_dt(df)

result <- df.dt %>%
  mutate(m = mean(c_across(x:z))) %>%
  as_tibble()

print(result)

说明

两种方法的计算结果和你原本用rowwise()实现的完全一致,但效率远高于rowwise()——尤其是在处理大数据集时,向量化操作避免了逐行分组的开销,这也是data.table/dtplyr的核心优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:45:43