#r #dataframe #dplyr
#r #dataframe #dplyr
Вопрос:
Итак, у меня всего 4 разных столбца в dataframe
port ip service numberOfTimes
1 22 11.11.79.100 ssh 16
2 80 11.11.79.100 www 19
3 111 11.13.79.110 ipw 21
4 123 11.13.79.110 ssh 50
5 22 64.50.80.140 cde 45
6 80 64.50.80.140 www 16
7 22 71.11.64.100 ssh 234
8 80 71.11.64.100 you 33
9 22 100.15.31.1 ssh 99
10 41 120.15.31.12 has 19
Итак, у меня следующий вопрос:
Можно ли сгруппировать с помощью r до следующего, чтобы это могло стать чем-то подобным?
После
port ip(count of same ip) service numberOfTimes
22 4 ssh 399 (#1 #5 #7 #9)
80 3 www 68 (#2 #6 #8)
и так далее, и так для остальных портов
Комментарии:
1. Вы уже отметили
dplyr
, поэтому я предполагаю, что вы сталкивалисьgroup_by()
сsummarize()
функциями and . Предпринимали ли вы какие-либо попытки решить эту проблему самостоятельно? Какой код вы написали и где именно вы застряли?2. Привет @MrFlick, если честно. Я застрял, действительно застрял. Я хотел попробовать dt<- dt%>% group_by(порт, сервис) %>% summarise(numberOfTimes=sum(numberOfTimes)), но это не сработало. Произошла ошибка невозможно изменить группирующую переменную. Но опять же, даже если я обобщу их вместе, что произойдет с IP-адресами, которые связаны с каждой строкой? Я действительно застрял в том, как начать. потому что каждая строка кажется зависимой от другой
Ответ №1:
Использование dplyr
, это довольно просто:
testData %>%
group_by(port, service) %>%
summarise(`Number of IPs` = n_distinct(ip)
, `Total number of times` = sum(numberOfTimes))
Что для образца данных, которые вы включили, дает:
port service `Number of IPs` `Total number of times`
<int> <chr> <int> <int>
1 22 cde 1 45
2 22 ssh 3 349
3 41 has 1 19
4 80 www 2 35
5 80 you 1 33
6 111 ipw 1 21
7 123 ssh 1 50
Если вы получаете какую-то ошибку (упомянутую в комментарии), вам нужно будет предоставить данные, которые на самом деле вызывают эту ошибку, прежде чем люди смогут вам помочь.
Комментарии:
1. О! Я совершенно забыл о функции unique и length для dplyr, большое вам спасибо за помощь, и да, извините за это.
2. Рад, что это сработало для вас. Однако
unique
ни то, ниlength
другое не являютсяdplyr
таковыми.3. Вы также можете использовать
n_distinct(ip)
, это должно быть быстрее, чемlength(unique(ip))
.4. Я всегда думал, что они из пакета, lol. Думаю, мне тоже есть чему поучиться, спасибо за ваш вклад @MarkPeterson
5. Спасибо @Scarabee — я этим не пользовался, и я делаю такой подсчет. Большая помощь.