为了账号安全,请及时绑定邮箱和手机立即绑定

使用行,列索引的矩阵索引值

使用行,列索引的矩阵索引值

手掌心 2019-12-03 16:20:46
这可能很容易解决。我有一个mat500行×335列的2D矩阵,以及一个dat120425行的data.frame。data.frame dat有两列I和J,它们是从索引到行的整数mat。我想将的值从添加mat到的行中dat。这是我的概念上的失败:> dat$matval <- mat[dat$I, dat$J]Error: cannot allocate vector of length 1617278737(我在Win32上使用R 2.13.1)。深入研究,我发现我在滥用矩阵索引,因为看来我只是得到的子矩阵mat,而不是我所期望的一维值数组,即:> str(mat[dat$I[1:100], dat$J[1:100]]) int [1:100, 1:100] 20 1 1 1 20 1 1 1 1 1 ...我期待着类似的东西int [1:100] 20 1 1 1 20 1 1 1 1 1 ...。使用行,列的索引获取值来索引2D矩阵的正确方法是什么?
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

几乎。需要提供给“ [”作为两列矩阵:


dat$matval <- mat[ cbind(dat$I, dat$J) ] # should do it.

有一个警告:尽管这也适用于数据帧,但它们首先被强制转换为矩阵类,如果有任何非数字类,则整个矩阵将成为“最低分母”类。


查看完整回答
反对 回复 2019-12-03
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

这是使用apply基于行的操作的单线


> dat <- as.data.frame(matrix(rep(seq(4),4),ncol=2))

> colnames(dat) <- c('I','J')

> dat

   I  J

1  1  1

2  2  2

3  3  3

4  4  4

5  1  1

6  2  2

7  3  3

8  4  4

> mat <- matrix(seq(16),ncol=4)

> mat

     [,1] [,2] [,3] [,4]

[1,]    1    5    9   13

[2,]    2    6   10   14

[3,]    3    7   11   15

[4,]    4    8   12   16


> dat$K <- apply( dat, 1, function(x,mat) mat[ x[1], x[2] ], mat=mat )

> dat

  I J  K

1 1 1  1

2 2 2  6

3 3 3 11

4 4 4 16

5 1 1  1

6 2 2  6

7 3 3 11

8 4 4 16


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 689 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信