如何在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
相关产品推荐
相关产品推荐

