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

R中按列分组拼接行,PowerBI无循环实现及data.table使用求助

解决R(PowerBI中)data.table分组处理行的问题

看起来你是想按指定列分组,对observaciones列做拆分/拼接操作,同时避免循环——data.table确实是做这类向量化工作的绝佳工具,我来帮你修正代码里的问题,同时梳理清楚两种常见的需求场景:

场景1:按分组拆分observaciones为多行

如果你的需求是把每个分组里的observaciones内容按;分割,拆成单独的行,同时保留所有分组列,那原代码的问题在于:

  • strsplit返回的是列表,直接放在j里会生成无命名的列(默认V1),且原observaciones列不会保留在结果中,导致后续substring(observaciones...报错
  • 必须用unlist把列表转成向量,同时给新列命名,才能后续处理

修正后的代码:

library(data.table)
hec1 <- as.data.table(dataset)

# 按指定列分组,拆分observaciones并扩展为多行,命名拆分后的列为obs_split
res <- hec1[, .(obs_split = unlist(strsplit(observaciones, split = ";"))), 
            by = c("albaran", "fecha", "cliente", "estado", "descrip", "destinatario", "direccion", "cp", "poblacion")]

# 从拆分后的内容提取tipo_pedido,这里假设你有特定规则,比如取前N位或正则匹配
# 示例:如果obs_split格式是"tipo:XXX;...",用正则提取XXX
res[, tipo_pedido := sub(".*tipo_pedido:(.*?)(;|$)", "\\1", obs_split)]
# 如果是简单取子串,比如前8个字符:
# res[, tipo_pedido := substring(obs_split, 1, 8)]

场景2:按分组拼接多行observaciones为单个字符串

如果你的需求是反过来——把同一分组下的多行observaciones内容用;拼接成一个字符串(也就是“分组拼接行”),那代码更简单:

library(data.table)
hec1 <- as.data.table(dataset)

# 按指定列分组,拼接所有observaciones为单个字符串
res <- hec1[, .(observaciones_concat = paste(observaciones, collapse = ";")), 
            by = c("albaran", "fecha", "cliente", "estado", "descrip", "destinatario", "direccion", "cp", "poblacion")]

PowerBI使用注意事项

在PowerBI的R脚本编辑器里,要确保:

  1. 已经安装data.table包(可以在PowerBI外部的R环境先运行install.packages("data.table"))
  2. 脚本最后要返回结果给PowerBI,直接写res即可(不需要额外print)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:53