#r #string-split #melt
#r #разделить #расплавить
Вопрос:
У меня есть фрейм данных, в котором я хочу разделить значения в клиенте.Идентификатор столбца и расплав, поэтому каждая строка содержит одного клиента.Идентификатор и соответствующая учетная запись.Имя и владелец.
> 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 amp; 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
Спасибо.
Комментарии:
1. 3185 Клиент. Идентификатор принадлежит Деб Берман, нет?
Ответ №1:
Я бы предложил мою 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 amp; Beyond 1180
# 10: Deb Berman Bed Bath amp; 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)
в зависимости от того, насколько хорош и чист ваш «Клиент.Столбец «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 amp; 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))
Комментарии:
1. 1 очень полезная функция — я должен начать ее использовать 🙂