r - 在 R 中使用 data.table,我可以从表中选择变量列的向量吗?
问题描述
假设我有一个像这样的表:
> A = data.table(c(1,2,3),c(4,5,6),c(7,8,9))
> A
V1 V2 V3
1: 1 4 7
2: 2 5 8
3: 3 6 9
我想选择第一行的第一列,第二行的第二列和第三行的第三列,得到结果:
> B
[1] 1 5 9
我试过类似的东西:
B = A[,c(1,2,3)]
但这不起作用。是否有可能做到这一点?(显然在我的实际用例中,每一行的列索引都是变量,但我可以保证向量的长度等于表中的行数)
解决方案
对元素进行子集化的矢量化方法是将行索引和列索引提供为矩阵
as.data.frame(A)[cbind(seq_len(nrow(A)), 1:3)]
#[1] 1 5 9
或转换.SD
为matrix
或data.frame
并使用行/列索引
A[, as.matrix(.SD)[cbind(1:3, 1:3)]]
或者 in ,在循环中data.table
传递i
,索引并提取元素j
A[, unlist(Map(function(i, j) .SD[i, j, with = FALSE], 1:3, 1:3),
use.names = FALSE)]
推荐阅读
- apache - Apache2 服务器后面的 Spring Boot SSL
- python - 如何从文本文件映射二维数组
- android - 如何从 Kotlin Firebase 中的两个引用中正确添加适配器?
- reactjs - 从 React 向 GraphQL 服务器进行查询时出现意外错误
- java - 如何在 JSON 中获得某个值?
- jquery - 如何检查是否已经为请求日期预订了约会
- javascript - 无法使用 JS 动态调整 SVG 大小(仅适用于桌面)
- python - 使用python模拟2D弹性碰撞
- reactjs - 不变量失败:您不应该使用
外面 - android - 如何在安装应用程序期间在文件目录中的 Android 项目中创建目录?