我会建议my cSplit功能对于这样的问题。解决方案变为:
cSplit(mydf, "Client.ID", ",", "long")
# Account.Owner Account.Name Client.ID
# 1: Deb Berman Albertsons LLC 3184
# 2: Deb Berman Albertsons LLC 3186
# 3: Deb Berman Albertsons LLC 3185
# 4: Deb Berman Albertsons LLC 2578
# 5: Deb Berman All Recipes 909
# 6: Deb Berman All Recipes 4937
# 7: Liz Madsen American Express 1230
# 8: Liz Madsen American Express 1236
# 9: Deb Berman Bed Bath & Beyond 1180
# 10: Deb Berman Bed Bath & Beyond 1556
# 11: Deb Berman Birchbox 101
# 12: Deb Berman Birchbox 1704
# 13: Deb Berman Birchbox 5149
# 14: Deb Berman Birchbox 5150
# 15: Deb Berman Birchbox 5148
# 16: Jeff Murphy Brown Shoe Company 5402
# 17: Jeff Murphy Brown Shoe Company 6159
# 18: Jeff Murphy Brown Shoe Company 6160
这里使用的参数是: (1)data.frame
or data.table
要使用的,(2) 需要拆分的一个或多个列,(3) 分隔符,以及 (4) 结果应该是“宽”还是“长”。
您可能需要按如下方式修改它:cSplit(mydf, "Client.ID", ", ", "long")
or cSplit(mydf, "Client.ID", ",|,\\s+", "long", fixed = FALSE)
取决于您的“Client.ID”列到底有多漂亮和干净。
假设我们从以下示例数据集开始:
mydf <- structure(list(Account.Owner = c("Deb Berman", "Deb Berman",
"Liz Madsen", "Deb Berman", "Deb Berman", "Jeff Murphy"),
Account.Name = c("Albertsons LLC", "All Recipes", "American Express",
"Bed Bath & Beyond", "Birchbox", "Brown Shoe Company"),
Client.ID = c("3184, 3186, 3185, 2578", "909, 4937", "1230,1236",
"1180, 1556", "101, 1704, 5149, 5150, 5148", "5402, 6159, 6160")),
.Names = c("Account.Owner", "Account.Name", "Client.ID"),
class = c("data.table", "data.frame"), row.names = c(NA, -6L))