r - 如何在 R 中的矩阵中进行外推和内插?
问题描述
假设我有以下矩阵(示例):
mat <- matrix(rnorm(30,0,1),3,10)
colnames(mat) <- c(0.5,1:9)
然后我想推断 0 然后在值之间进行插值。最后,我想要一个带有外插值和插值的矩阵:
solution_mat <- matrix(rnorm(273,0,1),3,length(seq(0,9,0.1)))
colnames(solution_mat) <- c(seq(0,9,0.1))
我怎样才能做到这一点?有解决这个问题的包吗?谢谢!
解决方案
我假设你的意思是线性插值。您可以使用approx
它来执行此操作,如果它在一个内部,apply
您可以一次对整个矩阵执行此操作。
但是,您需要先在左侧手动外推回零:
# Create data
set.seed(69)
mat <- matrix(rnorm(30,0,1),3,10)
colnames(mat) <- c(0.5,1:9)
# Linear extrapolation back to 0 on left
col_vals <- as.numeric(colnames(mat))
mat <- cbind(1/(col_vals[2] - col_vals[1]) * mat[,1] - mat[,2], mat)
colnames(mat)[1] <- "0"
插值部分很简单:
# Use approx inside apply to interpolate matrix row-wise
new_x <- seq(0, 9, 0.1)
mat <- t(apply(mat, 1, function(x) approx(as.numeric(colnames(mat)), x, new_x)$y))
colnames(mat) <- new_x
并产生以下结果:
mat
#> 0 0.1 0.2 0.3 0.4 0.5
#> [1,] 1.104220 0.8988088 0.693398 0.4879871 0.2825762 0.07716537
#> [2,] 1.688841 1.4259361 1.163031 0.9001258 0.6372207 0.37431557
#> [3,] -1.859251 -1.5543635 -1.249476 -0.9445887 -0.6397013 -0.33481390
#> 0.6 0.7 0.8 0.9 1 1.1
#> [1,] -0.1282455 -0.3336564 -0.5390672 -0.7444781 -0.9498890 -0.7104907
#> [2,] 0.1114104 -0.1514947 -0.4143998 -0.6773050 -0.9402101 -0.9365837
#> [3,] -0.0299265 0.2749609 0.5798483 0.8847357 1.1896231 0.9539753
#> 1.2 1.3 1.4 1.5 1.6 1.7
#> [1,] -0.4710925 -0.2316942 0.007704017 0.24710226 0.4865005 0.7258988
#> [2,] -0.9329574 -0.9293311 -0.925704743 -0.92207841 -0.9184521 -0.9148257
#> [3,] 0.7183274 0.4826796 0.247031707 0.01138385 -0.2242640 -0.4599118
#> 1.8 1.9 2 2.1 2.2 2.3
#> [1,] 0.9652970 1.2046953 1.4440935 1.1425768 0.8410601 0.5395435
#> [2,] -0.9111994 -0.9075731 -0.9039467 -0.8304697 -0.7569927 -0.6835157
#> [3,] -0.6955597 -0.9312076 -1.1668554 -1.0149945 -0.8631337 -0.7112728
#> 2.4 2.5 2.6 2.7 2.8 2.9
#> [1,] 0.2380268 -0.06348991 -0.3650066 -0.6665233 -0.9680400 -1.2695566
#> [2,] -0.6100386 -0.53656160 -0.4630846 -0.3896075 -0.3161305 -0.2426535
#> [3,] -0.5594119 -0.40755103 -0.2556902 -0.1038293 0.0480316 0.1998925
#> 3 3.1 3.2 3.3 3.4 3.5
#> [1,] -1.5710733 -1.5194710 -1.46786868 -1.416266357 -1.36466404 -1.3130617
#> [2,] -0.1691765 -0.1107594 -0.05234237 0.006074673 0.06449172 0.1229088
#> [3,] 0.3517533 0.1854406 0.01912780 -0.147184977 -0.31349775 -0.4798105
#> 3.6 3.7 3.8 3.9 4 4.1 4.2
#> [1,] -1.2614594 -1.2098571 -1.1582548 -1.106652 -1.055050 -0.9045474 -0.7540448
#> [2,] 0.1813258 0.2397429 0.2981599 0.356577 0.414994 0.3135009 0.2120078
#> [3,] -0.6461233 -0.8124361 -0.9787488 -1.145062 -1.311374 -1.2199133 -1.1284522
#> 4.3 4.4 4.5 4.6 4.7 4.8
#> [1,] -0.6035421 -0.453039412 -0.30253674 -0.1520341 -0.001531381 0.1489713
#> [2,] 0.1105147 0.009021623 -0.09247147 -0.1939646 -0.295457662 -0.3969508
#> [3,] -1.0369911 -0.945529994 -0.85406889 -0.7626078 -0.671146692 -0.5796856
#> 4.9 5 5.1 5.2 5.3 5.4
#> [1,] 0.2994740 0.4499766 0.4531326 0.4562886 0.4594446 0.4626006
#> [2,] -0.4984439 -0.5999369 -0.5657667 -0.5315964 -0.4974262 -0.4632559
#> [3,] -0.4882245 -0.3967634 -0.1076970 0.1813694 0.4704358 0.7595022
#> 5.5 5.6 5.7 5.8 5.9 6
#> [1,] 0.4657566 0.4689126 0.4720686 0.4752246 0.4783806 0.4815365
#> [2,] -0.4290857 -0.3949154 -0.3607452 -0.3265749 -0.2924047 -0.2582344
#> [3,] 1.0485686 1.3376350 1.6267014 1.9157678 2.2048341 2.4939005
#> 6.1 6.2 6.3 6.4 6.5 6.6
#> [1,] 0.4287452 0.3759539 0.3231625 0.2703712 0.2175798 0.1647885
#> [2,] -0.3102029 -0.3621714 -0.4141399 -0.4661083 -0.5180768 -0.5700453
#> [3,] 2.1147251 1.7355496 1.3563742 0.9771988 0.5980233 0.2188479
#> 6.7 6.8 6.9 7 7.1 7.2
#> [1,] 0.1119972 0.05920581 0.006414474 -0.04637687 -0.06518106 -0.08398526
#> [2,] -0.6220138 -0.67398223 -0.725950706 -0.77791918 -0.69769126 -0.61746334
#> [3,] -0.1603276 -0.53950303 -0.918678478 -1.29785392 -1.09924062 -0.90062731
#> 7.3 7.4 7.5 7.6 7.7 7.8
#> [1,] -0.1027895 -0.1215936 -0.1403978 -0.1592020 -0.17800623 -0.1968104
#> [2,] -0.5372354 -0.4570075 -0.3767796 -0.2965517 -0.21632375 -0.1360958
#> [3,] -0.7020140 -0.5034007 -0.3047874 -0.1061741 0.09243923 0.2910525
#> 7.9 8 8.1 8.2 8.3 8.4
#> [1,] -0.21561462 -0.23441882 -0.05623973 0.1219394 0.3001185 0.4782975
#> [2,] -0.05586791 0.02436001 -0.08363285 -0.1916257 -0.2996186 -0.4076114
#> [3,] 0.48966585 0.68827916 0.69400178 0.6997244 0.7054470 0.7111696
#> 8.5 8.6 8.7 8.8 8.9 9
#> [1,] 0.6564766 0.8346557 1.0128348 1.1910139 1.3691930 1.5473721
#> [2,] -0.5156043 -0.6235972 -0.7315900 -0.8395829 -0.9475757 -1.0555686
#> [3,] 0.7168923 0.7226149 0.7283375 0.7340601 0.7397827 0.7455053
由reprex 包(v0.3.0)于 2020-06-27 创建
推荐阅读
- vue.js - 另一个路由视图组件的调用方法 / Vue.js
- java - Wildfly-Swarm(现在的 Thorntail)中的热交换
- powershell - VMWare PowerCLI 获取已关闭虚拟机的 DiskUsage
- c# - 两个 Web 应用程序之间的 HttpRequest 限制
- netlify - 如何仅从 Netlify 访问登录用户(具有某些角色)的表单提交
- xml - XSLT | 如何获取子节点值最频繁的 3 个节点
- php - PHP按顺序将日期集拆分为范围
- python - 可以将“%H:%M:%S”日期时间对象设为具有相同“%H:%M:%S”格式的数字数据类型吗?
- html - 如何删除网址中的多余斜杠
- docker - 在 Docker swarm 中共享绑定卷