2016-06-22 33 views
1

2点を同じy値で接続するときに問題があります。2点を線で結ぶ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 

私がこれまで持っていることは以下の通りである:私のデータセットはこの(私はフォーマットがOKであると思います)のように見えます

になり
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

I点を同じy軸値で接続したい。また、線を引くことや仕事をすることはできません。前もって感謝します!

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)) 

最終編集:

プロットラインが機能しなかった理由は、最小値と最大値のデータ型がタイムスタンプだったこと、でした。それらを数値にキャストすると、期待した結果が得られました。あなたのお手伝いをしてくれてありがとう

+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])) 

あなたが希望のための2つの別々のグループを持っていることが表示されますので、これは

enter image description here

データ

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

を返します。これらの線を引くように、fol (

  • がdupesListにこれらの重複のなインデックスを置くのy変数
  • の重複する値を計算し、各グループの

    1. 、(minとmaxは、私は信じている):lowingは、アルゴリズムになりますおそらくdupesListMinとdupesListMax)。
  • プロット各dupesList上の点
  • 走行1つのsapply機能。
  • +0

    'x1 < - mydata $ min、y'と' x2 <-mydata $ max、y'を接続する必要がありますか?助けてくれてありがとう ! – Wirsiing

    +1

    dupesListと同じy値のインデックスを収集するプロセスを2回、min変数とmax変数の両方に1回ずつ実行したいと思うでしょう。これらのインデックスが2つの別々のリストに集められたら、「sapply」を使用して散布図の上に線を描画します。色を制御するために、col引数を追加することをお勧めします。 – lmo

    +0

    私は恐れている、私は実際にそれを行うにはRについて十分に知りません。私は2つのdupesListsを作成し、次にsapplyを2回作成しなければならないと仮定します。私が正しく理解していれば、dupeValsはすべてのy値のリストです。 dupesListは、重複するy値を持つすべてのx値のリストを作成します。sapplyはすべてのxとすべての重複するy値に対して行を呼び出します。私はちょうどそれがx値を計算する方法を理解していません。 – Wirsiing

    関連する問題