【发布时间】:2018-10-19 07:03:55
【问题描述】:
我有一个这种格式的数据集:
#albaran|fecha|cliente|estado|descrip|destinatario|direccion|cp|poblacion|observaciones
#11111|43229|C1|E1|D1|DD1|DIR1|CP1|P1|COLECCIÓN CLÁSICOS DISNEY - Entrega Nº: 11, 12, 13, 14; Grandes Enigmas - Entrega Nº: 5, 6
#22222|43229|C2|E2|D2|DD2|DIR2|CP2|P2|COLECCIÓN CLÁSICOS DISNEY - Entrega Nº: 8, 9; Otro Pedido - Entrega Nº: 1, 2
我需要转换:
#albaran|fecha|cliente|estado|descrip|destinatario|direccion|cp|poblacion|pedido|entregas
#11111|43229|C1|E1|D1|DD1|DIR1|CP1|P1|COLECCIÓN CLÁSICOS DISNEY|11, 12, 13, 14
#11111|43229|C1|E1|D1|DD1|DIR1|CP1|P1|Grandes Enigmas|5, 6
#22222|43229|C2|E2|D2|DD2|DIR2|CP2|P2|COLECCIÓN CLÁSICOS DISNEY|8, 9
#22222|43229|C2|E2|D2|DD2|DIR2|CP2|P2|Otro Pedido|1, 2
我正在尝试
library(data.table)
hec1 <- as.data.table(dataset)
res <- hec1[,strsplit(observaciones, split = ";"),by = c("albaran", "fecha", "cliente", "estado", "descrip", "destinatario", "direccion", "cp", "poblacion")]
res[, pedido:= substring(observaciones, 1, regexpr(":", observaciones)-2)][, entregas := substring(observaciones, regexpr(":", observaciones)+2, nchar(observaciones))]
res$V1 <- NULL
res <- res[,strsplit(entregas, split = ","),by = c("albaran", "fecha", "cliente", "estado", "descrip", "destinatario", "direccion", "cp", "poblacion", "tipo_pedido")]
setnames(res, "pedido", "entregas")
res
但它不起作用,告诉我这个错误:
strsplit(observaciones, split = ";") 中的错误:argumento de Tipo 无字符调用:[ -> [.data.table -> strsplit Ejecución 昙花一现
我认为...问题可能出在原始格式上吗?这是data.table。
感谢@prem,您的示例在 RStudio 上运行良好,我尝试在 PowerBI Script 上执行此脚本,但显示此错误
UseMethod("separate_rows_") 中的错误: 没有适用于“separate_rows_”的方法应用于对象... 错误代码=-2147467259 ExceptionType=Microsoft.PowerBI.Radio.RScriptRuntimeException
当我尝试使用 dplyr 库时,出现以下错误
DataSource.Error: ADO.NET: R 脚本错误。
附加包:'dplyr'
以下对象被 'package:stats' 屏蔽:
过滤,滞后
以下对象被 'package:base' 屏蔽:
相交、setdiff、setequal、联合
UseMethod("separate_rows_") 中的错误: 没有适用于“separate_rows_”的方法应用于类>“函数”的对象 调用:%>% ... 分离行 -> 分离行.default -> 分离行_ Ejecución interrumpida
此包兼容 PowerBI https://docs.microsoft.com/es-es/power-bi/service-r-packages-support
这是代码,我不能使用 tidyverse,因为它不兼容。
library(ggplot2)
library(tibble)
library(tidyr)
library(readr)
library(ggplot2)
library(stringr)
library(forcats)
library(dplyr)
df %>%
separate_rows("observaciones", sep = ";") %>%
separate(observaciones, c("pedido", "entregas"), " - Entrega Nº ")
问题解决了,谢谢@Prem
这是最终版本:
library(ggplot2)
library(tibble)
library(tidyr)
library(readr)
library(ggplot2)
library(stringr)
library(forcats)
library(dplyr)
library(data.table)
df <- as.data.table(dataset)
df <- df %>%
separate_rows("observaciones", sep = ";") %>%
separate(observaciones, c("pedido", "entregas"), " - Entrega Nº:")
df <- df %>%
separate_rows("entregas", sep = ", ") %>%
separate(entregas, c("entregas"), ",")
df <- df %>%
separate_rows("entregas", sep = "y") %>%
separate(entregas, c("entregas"), ",")
【问题讨论】:
-
请不要发布数据图片,它们不是很有用。
-
这非常适合
tidyr::separate_rows()的功能 -
见
?tstrsplit
标签: r data.table strsplit