r - R中的数据操作和结构化
问题描述
我有一个看起来像这样的“Exp”数据集:
Locals Res Ind
1 112 7.865 4.248
2 113 4.248 5.666
3 114 5.666 2.444
4 115 2.444 7.865
5 116 7.865 4.248
6 117 4.248 6.983
7 118 5.666 3.867
8 119 2.444 2.987
我还有另一个名为“Com”的数据集,如下所示:
113 112 113
112 114 119
116 118 119
118 118 119
117 117 119
117 117 119
我想根据 Com 数据中的值创建两个名为“Res”和“Ind”的矩阵,将其与 Exp 数据的第一行 Local 匹配,并从“Res”或“Ind”中获取相应的值列取决于为其创建的矩阵。例如 - Com 数据集中的第一个值是 113,因此在 Res 矩阵中,第一个值将是 4.248 - 因为 Exp 的第一列 113 中的对应值是 4.248。使得 Res 矩阵看起来像这样
4.248 7.865 4.248
7.865 5.666 2.444
7.865 5.666 2.444
5.666 5.666 2.444
4.248 4.248 2.444
4.248 4.248 2.444
任何人都可以建议在 R 上执行此操作的简单方法。如果需要创建许多矩阵并且 Exp 的第一行中有许多值,那么最快的方法是什么?
提前致谢
解决方案
structure(dat1$Res[match(unlist(dat2),dat1[,1])],.Dim=dim(dat2))
[1,] 4.248 7.865 4.248
[2,] 7.865 5.666 2.444
[3,] 7.865 5.666 2.444
[4,] 5.666 5.666 2.444
[5,] 4.248 4.248 2.444
[6,] 4.248 4.248 2.444
structure(dat1$Ind[match(unlist(dat2),dat1[,1])],.Dim=dim(dat2))
[,1] [,2] [,3]
[1,] 5.666 4.248 5.666
[2,] 4.248 2.444 2.987
[3,] 4.248 3.867 2.987
[4,] 3.867 3.867 2.987
[5,] 6.983 6.983 2.987
[6,] 6.983 6.983 2.987
您可以在一行中执行此操作:
lapply(Exp[-1],function(x) structure(x[match(as.matrix ( Com),Exp[,1])],.Dim=dim(Com)))
$Res
[,1] [,2] [,3]
[1,] 4.248 7.865 4.248
[2,] 7.865 5.666 2.444
[3,] 7.865 5.666 2.444
[4,] 5.666 5.666 2.444
[5,] 4.248 4.248 2.444
[6,] 4.248 4.248 2.444
$Ind
[,1] [,2] [,3]
[1,] 5.666 4.248 5.666
[2,] 4.248 2.444 2.987
[3,] 4.248 3.867 2.987
[4,] 3.867 3.867 2.987
[5,] 6.983 6.983 2.987
[6,] 6.983 6.983 2.987
推荐阅读
- pgbouncer - 即使密码错误,pgbouncer 也能正常工作
- python - 如何使用 Zelle 图形模块制作动画?
- sql - 为什么我需要动态查询“来自查询的列值”
- shell - Shell Scipt 仅运行 100 个站点的证书的单次迭代,它应该运行 100 次
- java - 在 HSB 颜色模式中更改不透明度
- dart - Flutter:根据值显示不同的图标
- python - pygame time.sleep 优先于函数的其余部分
- c++ - std::sort (stable_sort) 比较函数返回值的令人困惑的结果
- python - 如何设置将字典转换为字符串的循环?
- php - 为什么我的表单在 ie 中向 php 文件提交了一个空字符串,而不是在 chrome 或 mozilla 中?