r - 根据列名合并
问题描述
我有以下data.frame:
> head(y)
depth value 1 2 3 4 5 6 7
1 7 -82 -81 -80 -79 -78 -78 -77
1 5 -82 -81 -80 -79 -78 -78 -77
1 5 -82 -81 -80 -79 -78 -78 -77
1 2 -82 -81 -80 -79 -78 -78 -77
1 2 -82 -81 -80 -79 -78 -78 -77
1 1 -82 -81 -80 -79 -78 -78 -77
我需要根据“value”列的值合并data.frame,并从“1”:“7”列中获取相应的值。我想得到以下结果:
depth value merged_value
1 7 -77
1 5 -78
1 5 -78
1 2 -81
1 2 -81
1 1 -82
我问这个是因为我有数百万行并且使用经典循环太慢了。提前致谢!乔恩
解决方案
我完全重做这个答案:
在 R 中,您不需要遍历矩阵或 data.frames。R 本质上是矢量化的。所以让我们用向量挑选出正确的列。
要从矩阵中选择一个矩阵,我们必须用一个矩阵进行子集化。比较以下。vals
是您要“合并”的值的子集:
vals <- as.matrix(y[,3:9])
vals[y[,2]]
并与 cbind(1:nrow(vals), y[,2]) vals[x] 进行比较
你看得到差别吗?
现在把正确的线放在一起:
vals <- as.matrix(y[,3:9])
x <- cbind(1:nrow(vals), y[,2])
cbind(y[,1:2], vals[x])
或者稍微改进的版本:
x <- cbind(1:nrow(y), y[,2]+2)
cbind(y[,1:2], y[x])
推荐阅读
- docker - 副本会减少单节点 Kubernetes 集群上的流量吗?
- javascript - 如何使用云功能将子级添加到 Firebase 实时数据库中的列表?
- json - DynamoDB JSON 响应解析垂直打印
- r - 如何删除 R 中的 na 并使低于值上升
- c# - 如何设置条件 C# if 语句和 LINQ where 语句?
- ruby-on-rails - 如何降级gemfile中的gem?
- javascript - Mongoose:$lookup 后的 $project 不显示字段
- reason - ReasonReact 减速器中的动作类型错误
- android - 在 android 的 okhttp 请求中使用证书
- javascript - 浏览器 JavaScript 内存泄漏