2016-11-14 7 views
2

私はそれがより簡単になると思っていましたが、私はちょっと立ち往生しました。私は、参照を呼び出しますデータだことノルムからの逸脱を見つけてグラフを作ってください

:2つだけ列を持つデータフレームをだ

> dput(data_db)) 
structure(list(`Name` = c("Mark", "Taylor", "Greg", 
           "Matt", "Jose", "Tito"), `App` = c(13.8, 
                         5.8, 5.7, 7, 2.2, 0.8)), .Names = c("Name", "App" 
                         ), row.names = c(1L, 2L, 3L, 4L, 5L, 7L), class = "data.frame") 

を、私はリファレンスとして、このデータに格納された値を使用したいのは、データを見てみましょう。

"実験" データ:

> dput(vec_app) 
structure(c(11.2486020246044, 27.9095887912373, 2.66645609602021, 
      2.98274862650751, 4.59749360062788, 2.55364011307289, 11.7322396774642, 
      19.7441226589095, 28.5664707877918, 3.57742181540809, 2.49765817934088, 
      22.7248069645865, 2.19587564508074, 5.84484370131893, 16.5705533218457 
), .Names = c("Mark_1", "Mark_2", "Taylor_1", "Taylor_2", 
       "Greg_1", "Greg_2", "Greg_3", "Matt_1", "Matt_2", 
       "Jose_1", "Jose_2", "Jose_3", "Jose_4", "Jose_5", 
       "Tito_1")) 

データが数値ベクトルの形で保存されています。わかるように、このベクトルの名前は参照データに由来する名前と似ています。異なる実験からの値は、_および実験の数によって分離される。ご覧のとおり、実験の数は変数ごとに異なります。

私はすべての実験を通して、参照から来るものに最も近い値を見つけて、それを「回帰」の形でプロットしたいと思います。添付の塗料の描画例を見てください。

My drawing skills

赤線参照用データを示しています。青い点は、実験の1つで確立された各名前に最も近い値を表します。もちろん、提供されるデータよりも多くのドットがあります。それは単なる例です。

私がここに示したいことを理解して、それを視覚化する他の方法を提供したいと思うかもしれません。

答えて

3

まずあなたが実験に対応する名前を取得する必要があります。

names_vec_app <- sub("([^_])_\\d+", "\\1", names(vec_app)) 
また、対応する名前を持つ最初のdata.frameの値を参照して、差異を計算する必要が

diff_app_ref <- vec_app-data_db$App[match(names_vec_app, data_db$Name)] 

最後に、あなたが名前ごとに、絶対最小差で1を取得する必要があります:

absminbyname <- aggregate(diff_app_ref ~ names_vec_app, FUN=function(x) x[which.min(abs(x))]) 
absminbyname 
# names_vec_app absdiff_app_ref 
#1   Greg  -1.102506399 
#2   Jose  -0.004124355 
#3   Mark  -2.551397975 
#4   Matt  12.744122659 
#5  Taylor  -2.817251373 
#6   Tito  15.770553322 

次に、最も適した方法で値をプロットすることができます。たとえば
:それは素晴らしい...あなたのためにとても簡単だったのはなぜ

plot(1:nrow(absminbyname), absminbyname$diff_app_ref, axes=FALSE, xlab="names", ylab="min difference", pch=19, col="blue", ylim=c(floor(min(absminbyname$diff_app_ref)), ceiling(max(absminbyname$diff_app_ref)))) 
abline(h=0, col="red") 
axis(2, at=floor(min(absminbyname$diff_app_ref)): ceiling(max(absminbyname$diff_app_ref))) 
axis(1, at=1:nrow(absminbyname), labels=absminbyname$names_vec_app) 

enter image description here

+0

。どうも。 –

+0

@ShaxiLiver時には、あなたが行うことが必要なものではないときには簡単です;-)私は助けてくれると嬉しいです:-) – Cath

関連する問題