亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

手掌心 2019-12-03 16:20:46
這可能很容易解決。我有一個mat500行×335列的2D矩陣,以及一個dat120425行的data.frame。data.frame dat有兩列I和J,它們是從索引到行的整數mat。我想將的值從添加mat到的行中dat。這是我的概念上的失?。?gt; 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 關注
  • 778 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號