下面是数据设置:获取价值
require(data.table)
set.seed(42)
pos_mat <- data.table(c1 = sample(1:1000), c2 = sample(1:1000), c3 = sample(1:1000))
data <- data.table(value = rnorm(1000), other_stuff = rnorm(1000))
表看起来是这样的:
> pos_mat
c1 c2 V3
1: 915 849 990
2: 937 63 439
3: 286 819 699
4: 828 538 887
5: 640 498 831
996: 118 793 783
997: 777 670 617
998: 579 195 643
999: 351 728 221
1000: 834 742 244
和:
> data
value other_stuff
1: -0.6013830 0.617336710
2: -0.1358161 -0.004541141
3: -0.9872728 -0.091256360
4: 0.8319250 0.399959375
5: -0.7950595 0.588901657
996: -0.3757455 0.264323016
997: -1.0417354 -1.355822276
998: 0.6976674 0.359071548
999: -0.1444488 -1.708252839
1000: 0.4985434 -0.635928277
现在每个元素在pos_mat中响应数据中的行号。我会新建一个与pos_mat具有相同尺寸的data.table,但不是具有行数,而是保存来自数据的相应值。
I.e. pos_mat [1,。(c1)]的值为915.在数据[915,。(value)] = 0.1702369中,我希望将它存储在新对象中。
我觉得是这样的:
new <- pos_mat
n <- nrow(pos_mat)
for(i in n) new[i,] <- data[unlist(pos_mat[1,]), value]
应该工作,但它一直告诉我的尺寸是错误的。
是不是更清晰了吧? – Repmat
如果你想保持相同的尺寸这应该工作'新< - cbind(data $ value [pos_mat $ c1],数据$ value [pos_mat $ c2],数据$ value [pos_mat $ c3])' –
@EtienneMoerman我看到你的想法,我有100.000列...这将是一些typ'ing ... – Repmat