
Привет,
Я хотел бы отфильтровать самые большие значения datetime для каждого клиента по первым трем цифрам mccmnc.
Как вы можете видеть на картинке, customer == 'abghsd' имеет два разных значения mccmnc - «53208» и «53210». Однако первые три цифры mccmnc такие же (532). Итак, я хочу отфильтровать максимальное значение даты и времени клиента abghsd с помощью mccmnc = '532'. Для customer = 'abbaedl' мне нужно отфильтровать максимальное время для mccmnc = '623' и mccmnc = '451'.
Могу я спросить, как создать условия для этой проблемы?
С помощью приведенного ниже запроса я смог отфильтровать datetime по customer и mccmnc, но я хочу отфильтровать первые три цифры mccmnc.
processed <- aggregate(datetime ~ customer + mccmnc, data =raw_data3, max)
Вот результат, который я хочу получить:
Customer datetime mccmnc
abghsd 20181123222022 53210
abbaedl 20181226121213 62330
abbaedl 20181227191919 45123
Спасибо.
Какой алгоритм для этого? Просто взять первые три значения из mccmnc?
Похоже, у вас серьезные проблемы с вашей базовой структурой данных. Имеет ли, например, длину mccmncвсегда точно пять цифр?
@ RomanLuštrik да, мне нужно взять первые три значения из mccmnc





Отредактировав исходный код, вы можете просто добавить substr():
processed <- aggregate(datetime ~ customer + substr(mccmnc, 1, 3), data = raw_data3, max)
Alternatively, a tidyverse solution:
library(tidyverse)
df %>%
# Group by customer ID and first 3 characters of mccmnc
group_by(customer, mccmnc_group = substr(mccmnc, 1, 3)) %>%
# Get the max datetime per group
summarise(max_datetime = max(datetime)) %>%
# Put columns in original order
select(1, 3, 2)
# A tibble: 3 x 3
# Groups: customer [2]
customer max_datetime mccmnc_group
<fct> <dbl> <chr>
1 John Package 20181201 532
2 Miranda Nuts 20181227 451
3 Miranda Nuts 20181226 623
df <- data.frame(customer = c(rep("John Package", 3), rep("Miranda Nuts", 4)),
datetime = c(20181123, 20181201, 20181124, 20181125, 20181226, 20181226, 20181227),
mccmnc = c("532-08", "532-08", "532-10", "623-12", "623-30", "451-21", "451-23"))
> df
customer datetime mccmnc
1 John Package 20181123 532-08
2 John Package 20181201 532-08
3 John Package 20181124 532-10
4 Miranda Nuts 20181125 623-12
5 Miranda Nuts 20181226 623-30
6 Miranda Nuts 20181226 451-21
7 Miranda Nuts 20181227 451-23
пожалуйста, укажите данные, чтобы мы могли вам помочь. Используйте команду
dput(data)и включите вывод в свои вопросы