0
我想創建條件隨機對而不使用for-loops,因此我可以使用大數據集的代碼。起初,我創建一個唯一的ID行和隨機指定兩個不同的「類型」我行:矢量化條件隨機匹配
df<-data.frame(id=1:10,type=NA,partner=NA)
df[sample(df$id,nrow(df)/2),"type"]<-1 ##random 50% type 1
df[which(is.na(df$type)==TRUE),"type"]<-2 ##other 50% type 2
df
id type partner
1 1 2 NA
2 2 1 NA
3 3 1 NA
4 4 1 NA
5 5 2 NA
6 6 1 NA
7 7 1 NA
8 8 2 NA
9 9 2 NA
10 10 2 NA
現在我想他們接受相反類型的隨機夥伴。所以我隨機我的類型1 ID和匹配他們到一些類型2 ID像這樣:
df$partner[which(df$type==2)]<-sample(df$id[which(df$type==1)],
nrow(df)/2)
df
id type partner
1 1 2 4
2 2 1 NA
3 3 1 NA
4 4 1 NA
5 5 2 2
6 6 1 NA
7 7 1 NA
8 8 2 6
9 9 2 3
10 10 2 7
而這就是我卡住的地方。由於某種原因,我想不出一種矢量化的方式來告訴R「取1型ID,看看這些ID在df$partner
中的位置,並返回對應的行ID爲df$partner
,而不是NA」。一個for循環的條件隨機配對
一個例子可以在這裏找到:click
我敢肯定,這是很基本的,可行的,但是,任何幫助表示讚賞!