我预计这会更容易,但我有点卡住,今天可能太累了。让我们从数据开始:
这是一个我称之为参考的数据:
> 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"))
数据以数字向量的形式存储。我们可以看到此向量中的名称与来自参考数据的名称相似。来自不同实验的值由_
和实验数分隔。如您所见,每个变量的实验数量都不同。
我想在所有实验中找到与参考文献最接近的值,并以“回归”的形式绘制它。看看油漆附图中的附图。
红线显示数据供参考。蓝点表示在其中一个实验中建立的每个名称的最接近的值。当然,比提供的数据更多的点。这只是一个例子。
希望你明白我想在这里展示什么,也许你想提供任何其他方式来形象化。
答案 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)