找出与标准的偏差并制作图表

时间:2016-11-14 14:08:47

标签: r

我预计这会更容易,但我有点卡住,今天可能太累了。让我们从数据开始:

这是一个我称之为参考的数据:

> 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 个答案:

答案 0 :(得分: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)]

最后,您需要获得每个名称具有绝对最小差异的那个:

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