我有以下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
我之所以这样问是因为我有数百万行,并且使用经典循环太慢了。 提前致谢! 乔恩
答案 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])