首页 > 解决方案 > 根据列名合并

问题描述

我有以下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 

我问这个是因为我有数百万行并且使用经典循环太慢了。提前致谢!乔恩

标签: rmergenames

解决方案


我完全重做这个答案:

在 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])

推荐阅读