如何基于另一data.frame存储的下标一次性子集化data.frame
解决方案:用矩阵下标一次性提取多位置元素
这问题其实很好解决,R里的data.frame支持直接用矩阵作为下标,来一次性提取多个(row, column)对应位置的元素,完全不用分开提取再合并!
步骤说明
- 把存储下标的
sub数据框转换成矩阵格式(矩阵的每一行刚好对应一组行、列坐标) - 直接用这个矩阵作为索引传入
df[],就能得到目标结果
完整代码示例
先重现你的原始数据:
set.seed(1) x <- rnorm(5) df <- data.frame(x,x*x, x*2, x/2) sub <- data.frame(row = c(1,2), col = c(3,4))
然后执行提取操作,一行代码搞定:
df[as.matrix(sub)]
运行后会直接返回你想要的结果:
[1] -1.25290762 0.09182166
原理补充
当用矩阵作为data.frame的索引时,矩阵的每一行代表一个(行号, 列号)的坐标对,R会按顺序提取每个坐标对应的元素,最终返回一个向量,完美匹配你的需求。如果不想单独定义矩阵变量,直接在索引里转换即可,省去额外步骤~
内容的提问来源于stack exchange,提问作者Karl A
相关产品推荐
相关产品推荐

