使用class CodeController
{
public function actionGo()
{
$cardsIdsFromUsers = Users::find()
->select('card_id')
->column();
$accountsFromCards = Cards::find()
->where(['id' => $cardsIdsFromUsers])
->all();
foreach($accountsFromCards as $account){
$user = Users::find()
->where(['card_id' => $account->id])
->one();
$user->account_id = $account->account_id;
$user->update();
}
}
}
按两个索引进行排序,一个是重新排列的十分位,另一个是随机的。
order()
,
我认为这就是您所需要的。
swapByBlocks <- function(df,blockSize = 30,nblocks = 10){
if((nrow(df) != blockSize*nblocks) || nblocks %%2) stop("Undefined behaviour")
swappedDF <- df[c((nrow(df)/2 +1):nrow(df),1:(nrow(df)/2)),]
ndxMat <- sapply(1:(nblocks/2),function(dummy) sample(1:blockSize))
for(i in 1:ncol(ndxMat)) {
swappedDF[(i-1)*blockSize + 1:blockSize,] <- swappedDF[((i-1)*blockSize + 1:blockSize)[ndxMat[,i]],]
swappedDF[(i+nblocks/2-1)*blockSize + 1:blockSize,] <- swappedDF[((i+nblocks/2-1)*blockSize + 1:blockSize)[order(ndxMat[,i])],]
}
return(swappedDF)
}
一个小的情况下,您可以检查其工作方式:
res <- swapByBlocks(df[1:18,],blockSize = 3,nblocks = 6)
> df[1:18,]
index v1 v2
1 -9.859624 -1.657779 1.954094
2 -9.774898 -1.015825 1.006341
3 -9.624402 -1.713754 1.527065
4 -9.441129 -1.891834 1.803793
5 -9.424195 -1.125674 1.581199
6 -8.890537 -1.142044 1.219111
7 -8.838012 -1.173445 1.013408
8 -8.296938 -1.780396 1.570550
9 -8.172076 -1.789056 1.178596
10 -7.671897 -1.988539 1.690468
11 -7.655868 -1.095662 1.876414
12 -7.450011 -1.337443 1.632104
13 -7.204528 -1.880350 1.408944
14 -7.085862 -1.232293 1.593247
15 -7.030691 -1.087031 1.924306
16 -6.989892 -1.639967 1.495058
17 -6.978945 -1.395340 1.872944
18 -6.930379 -1.841031 1.061046
> res
index v1 v2
10 -7.450011 -1.337443 1.632104
11 -7.655868 -1.095662 1.876414
12 -7.671897 -1.988539 1.690468
13 -7.030691 -1.087031 1.924306
14 -7.085862 -1.232293 1.593247
15 -7.204528 -1.880350 1.408944
16 -6.989892 -1.639967 1.495058
17 -6.930379 -1.841031 1.061046
18 -6.978945 -1.395340 1.872944
1 -9.624402 -1.713754 1.527065
2 -9.774898 -1.015825 1.006341
3 -9.859624 -1.657779 1.954094
4 -8.890537 -1.142044 1.219111
5 -9.424195 -1.125674 1.581199
6 -9.441129 -1.891834 1.803793
7 -8.838012 -1.173445 1.013408
8 -8.172076 -1.789056 1.178596
9 -8.296938 -1.780396 1.570550
>
这里有18行,每行六个,每个数字三个。第1至3行与第10至12行,第4至6行,第13至15行以及第4行交换
7至9,第16至17行。
本文链接:https://www.f2er.com/3157680.html