我有一个数据框,我想在Client.ID列中分隔值并融化,因此每行包含一个Client.ID以及相应的Account.Name和owner。
> head(df)
Account.Owner Account.Name Client.ID
1 Deb Berman Albertsons LLC 3184, 3186, 3185, 2578
2 Deb Berman All Recipes 909, 4937
3 Liz Madsen American Express 1230,1236
4 Deb Berman Bed Bath & Beyond 1180, 1556
5 Deb Berman Birchbox 101, 1704, 5149, 5150, 5148
6 Jeff Murphy Brown Shoe Company 5402, 6159, 6160
最后我希望它看起来像这样
Account.Owner Account.Name Client.ID
1 Deb Berman Albertsons LLC 3184
2 Deb Berman Albertsons LLC 3186
3 Deb Berman Albertsons LLC 3185
感谢。
答案 0 :(得分:4)
对于像这样的问题,我建议my cSplit
function。解决方案变为:
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
或data.table
,(2)需要拆分的列,(3)分隔符,以及( 4)结果是否应该是"宽"或"长"。
您可能需要按照以下方式对其进行修改:cSplit(mydf, "Client.ID", ", ", "long")
或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))