gpt4 book ai didi

r - 按 R 中的列匹配 ID 追加列

转载 作者:行者123 更新时间:2023-12-01 15:15:38 25 4
gpt4 key购买 nike

所以我想做的事情对我来说很难表达,但非常简单,我可以很容易地向你展示。标题是我对措辞的最佳猜测,感谢编辑。

set.seed(1)
theta=matrix(rnorm(6,0,1),2,3)
M = c( 0 , 0 , 0 , 0, 1 ,
1, 0 , 0 , 0 , 1,
2 , 0 , 0 , 0, 2,
0 , 1 , 0 , 0 ,2,
1 , 1 , 0 , 0, 3,
0 , 2 , 0 , 0, 3)

M = matrix(M, nrow = 6,ncol= 5,byrow=T)
theta
[,1] [,2] [,3]
[1,] 0.4418121 1.962053 2.236691
[2,] 1.0931398 1.273616 1.050373

M
prod11 prod12 prod21 prod22 d
1 0 0 0 0 1
2 1 0 0 0 1
3 2 0 0 0 2
4 0 1 0 0 2
5 1 1 0 0 3
7 0 2 0 0 3


OUTPUT DESIRED

prod11 prod12 prod21 prod22 d theta1 theta2
1 0 0 0 0 1 0.4418121 1.0931398
2 1 0 0 0 1 0.4418121 1.0931398
3 2 0 0 0 2 1.962053 1.273616
4 0 1 0 0 2 1.962053 1.273616
5 1 1 0 0 3 2.236691 1.050373
7 0 2 0 0 3 2.236691 1.050373

最佳答案

我会使用 data.table :

setDT(M)
M[, paste0("theta",1:2) := as.data.table(t(theta[, d]))]
> M
V1 V2 V3 V4 V5 theta1 theta2
1: 0 0 0 0 1 -1.2341141 0.4675928
2: 1 0 0 0 1 -1.2341141 0.4675928
3: 2 0 0 0 2 -0.6186437 1.5602801
4: 0 1 0 0 2 -0.6186437 1.5602801
5: 1 1 0 0 3 0.1233480 -0.3746259
6: 0 2 0 0 3 0.1233480 -0.3746259

我们需要as.data.tableas.data.frame因为as.list破坏矩阵结果的维度和:=只会unlist结果是什么 t(theta[, d])


如果M确实存储为矩阵(不清楚,因为你没有命名它的维度),我建议你将它存储为 data.table (或 data.frame )通过使用 M <- data.table(M) .

为了完整起见,这里有一个纯矩阵表示法的解决方案:

M <- cbind(M, t(theta[, M[, "d"]]))

关于r - 按 R 中的列匹配 ID 追加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com