Есть ли способ установить этот набор данных таким образом, чтобы TCP, HTTP, DNS и т. Д. c становились переменными столбца, а переменная Info становилась строками? - PullRequest
0 голосов
/ 02 мая 2020

Может кто-нибудь помочь мне, пожалуйста? Мне нужно распространить набор данных таким образом, чтобы TCP, HTTP et c стали столбцами, а Info стала строками. Я попытался new_data <- spread (набор данных, протокол набора данных $, набор данных $ info) </strong>, и это не сработало. Пожалуйста, кто-нибудь может мне помочь.

введите описание изображения здесь

1 Ответ

0 голосов
/ 02 мая 2020

Вот решение, использующее tidyr::pivot_wider().

textFile <- "Protocol|Info
DNS|Standard query reponse 0x0800 AAA ppa.launchpad.net
TCP|35478 > 80 [SYN] Seq=0 Win=29200 Len=0
TCP|80 > 42936 [ACK] Seq=1 Ack=208 Win=30080
HTTP|HTTP/1.1 304 Not Modified
TCP|42936 > 80 [ACK] Seq=208, Ack=212 Win=30336 Len=0
HTTP|GET /ubuntu/dists/xenial-updates/InRelease HTTP/1.1"

df <- read.csv(text = textFile,header = TRUE,stringsAsFactors = FALSE,
               sep = "|",row.names = NULL)
id <- 1:nrow(df)
df <- cbind(id,df)

library(tidyr)
df %>% pivot_wider(id_cols = id,
                   names_from = Protocol,
                   values_from = Info)

... и вывод:

# A tibble: 6 x 4
     id DNS                       TCP                     HTTP                    
  <int> <chr>                     <chr>                   <chr>                   
1     1 Standard query reponse 0… NA                      NA                      
2     2 NA                        35478 > 80 [SYN] Seq=0… NA                      
3     3 NA                        80 > 42936 [ACK] Seq=1… NA                      
4     4 NA                        NA                      HTTP/1.1 304 Not Modifi…
5     5 NA                        42936 > 80 [ACK] Seq=2… NA                      
6     6 NA                        NA                      GET /ubuntu/dists/xenia…
> 

Обратите внимание, что, поскольку данные примера не документируют какую-либо связь между строками во входном файле, я присвоил id столбец, чтобы гарантировать, что строка в исходном фрейме данных назначена одной и только одной строке фрейма данных широкого формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...