2016-06-22 3 views
1

У меня есть проблема, соединяющая две точки с одинаковым значением y. Мой набор данных выглядит следующим образом (я надеюсь, что форматирование нормально):Соедините две точки с линией в R

attackerip,min,max 
125.88.146.123,2016-03-29 17:38:17.949778,2016-03-30 07:28:47.912983 
58.218.205.101,2016-04-05 15:53:20.69986,2016-05-12 17:32:08.583255 
183.3.202.195,2016-04-05 15:58:27.862509,2016-04-15 18:15:13.117774 
58.218.199.166,2016-04-05 16:09:34.448588,2016-04-24 06:02:12.237922 
58.218.204.107,2016-04-05 16:57:17.624509,2016-05-31 00:52:44.007908 

То, что я до сих пор является следующее:

mydata = read.csv("timeline.csv", sep=',') 
mydata$min <- strptime(as.character(mydata$min), format='%Y-%m-%d %H:%M:%S') 
mydata$max <- strptime(as.character(mydata$max), format='%Y-%m-%d %H:%M:%S') 
plot(mydata$min, mydata$attackerip, col="red") 
points(mydata$max, mydata$attackerip, col="blue") 

Какие результаты в: this Plot

Сейчас я хотите соединить точки с тем же значением оси y. И не может получить линии или abline для работы. Заранее спасибо!

EDIT: dput данных

dput(mydata) 
structure(list(attackerip = structure(c(1L, 5L, 2L, 3L, 4L), .Label = c("125.88.146.123", 
"183.3.202.195", "58.218.199.166", "58.218.204.107", "58.218.205.101" 
), class = "factor"), min = structure(1:5, .Label = c("2016-03-29 17:38:17.949778", 
"2016-04-05 15:53:20.69986", "2016-04-05 15:58:27.862509", "2016-04-05 16:09:34.448588", 
"2016-04-05 16:57:17.624509"), class = "factor"), max = structure(c(1L, 
4L, 2L, 3L, 5L), .Label = c("2016-03-30 07:28:47.912983", "2016-04-15 18:15:13.117774", 
"2016-04-24 06:02:12.237922", "2016-05-12 17:32:08.583255", "2016-05-31 00:52:44.007908" 
), class = "factor")), .Names = c("attackerip", "min", "max"), class = "data.frame", row.names = c(NA, 
-5L)) 

Final Edit:

Причина черчения линии не работа была, что тип данных мин и макс была метки времени. Приведение этих значений в числовые значения дало ожидаемый результат. Спасибо за вашу помощь.

+0

Будет редактировать его, но это выглядит еще хуже. – Wirsiing

ответ

3

Функция lines должна работать нормально. Однако вам нужно будет вызвать его для каждой пары (или набора) точек, которые имеют одинаковое значение y. Вот воспроизводимый пример:

# get sets of observations with the same y value 
dupeVals <- unique(y[duplicated(y) | duplicated(y, fromLast=T)]) 
# put the corresponding indices into a list 
dupesList <- lapply(dupeVals, function(i) which(y == i)) 

# scatter plot 
plot(x, y) 
# plot the lines using sapply 
sapply(dupesList, function(i) lines(x[i], y[i])) 

Это возвращает

enter image description here

данные

set.seed(1234) 
x <- sort(5* runif(30)) 
y <- sample(25, 30, replace=T) 

Как представляется, что у вас есть две отдельные группы, для которых вы бы как рисовать эти линии, мычали бы алгоритм:

  1. для каждой группы (мин и макс, я считаю)
    • вычислить повторяющиеся значения у переменной
    • поставить indicies этих дублей в dupesList (возможно, dupesListMin и dupesListMax).
  2. участка точка
  3. пробег один sapply функция на каждый dupesList.
+0

Мне нужно подключить 'x1 <- mydata $ min, y' и' x2 <-mydata $ max, y', как бы я это сделал? Спасибо за помощь ! – Wirsiing

+1

Вам нужно будет пройти процесс сбора индексов значений y, которые совпадают, как и в dupesList, дважды, один раз для переменных min и max. После того, как эти индексы будут собраны в два отдельных списка, используйте 'sapply', чтобы нарисовать линии поверх графика рассеяния. Вероятно, вы захотите добавить аргумент col для управления цветами. – lmo

+0

Боюсь, я не знаю достаточно о R, чтобы на самом деле это сделать. Я предполагаю, что мне нужно создать два списка дубликатов, а затем дважды использовать их? Если я правильно понимаю, dupeVals - это список всех значений y. dupesList затем создает список всех значений x, у которых есть повторяющиеся значения y.sapply затем вызывает строки для всех x и всех повторяющихся значений y. Я просто не понимаю, как он вычисляет значения х. – Wirsiing

Смежные вопросы