根据列名称合并

时间:2018-11-28 10:22:39

标签: r merge names

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

我需要基于“值”列的值合并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 

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

1 个答案:

答案 0 :(得分:1)

我正在完全重做此答案:

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