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脚本编辑器里,要确保:
- 已经安装
data.table包(可以在PowerBI外部的R环境先运行install.packages("data.table")) - 脚本最后要返回结果给PowerBI,直接写
res即可(不需要额外print)
内容的提问来源于stack exchange,提问作者Ismael Valle
相关产品推荐
相关产品推荐

