我有兩個數據幀。一個數據幀(Partners.Missing
)包含195個人,我需要使用第二個數據幀(NAsOnly
)中的隨機選擇構建合作伙伴,這些人是合夥人(已婚,事實上等)。從一個數據幀到另一個數據幀的條件隨機匹配
的Partners.Missing
數據幀信息是:
str(Partners.Missing)
'data.frame': 195 obs. of 8 variables:
$ V1 : Factor w/ 2 levels "Female","Male": 1 1 1 2 1 1 1 2 2 2 ...
$ V2 : Factor w/ 9 levels "15 - 17 Years",..: 4 4 7 7 4 4 7 3 7 4 ...
$ V3 : Factor w/ 1 level "Partnered": 1 1 1 1 1 1 1 1 1 1 ...
$ V4 : Factor w/ 7 levels "Eight or More Usual Residents",..: 1 1 5 2 1 1 1 1 2 5 ...
$ V5 : Factor w/ 8 levels "1-9 Hours Worked",..: 8 4 8 6 7 8 7 5 4 6 ...
$ SEX : chr "Male" "Male" "Male" "Female" ...
$ Ageband : num 4 4 7 7 4 4 7 3 7 4 ...
$ Inhabitants: num 8 8 6 5 8 8 8 8 5 6 ...
因爲V2是年齡頻帶的一個因素,我已經創建了Ageband
變量是V2
使得最年輕的年齡組(15重新編碼 - 17年)爲1,下一個最早的爲2等。Inhabitants
是V4
的重新編碼,再次構造數字變量。 Sex
是二元「男」/「女」。
第二數據幀(NAsOnly
)上的信息是:
str(NAsOnly)
'data.frame': 762 obs. of 7 variables:
$ SEX : Factor w/ 3 levels "Female","Male",..: 2 2 2 2 2 2 2 2 2 2 ...
$ AGEBAND : Factor w/ 13 levels "0 - 4 Years",..: 3 3 3 3 3 3 3 3 3 3 ...
$ RELATIONSHIP: Factor w/ 4 levels "Non-partnered",..: 3 3 3 3 1 1 1 1 1 1 ...
$ INHABITANTS : Factor w/ 9 levels "Eight or More Usual Residents",..: 7 7 3 2 9 9 9 9 7 7 ...
$ HRSWORKED : Factor w/ 9 levels "1-9 Hours Worked",..: 1 8 6 3 1 2 3 6 3 4 ...
我可以創建新的變量,以便在NAsOnly
Ageband
和Inhabitants
具有相同的結構,在匹配中使用。但我堅持如何配合。我想做的事 - 每個行Partners.Missing
- 是隨機NAsOnly
使用下列標準樣本的觀察:
- 相反
SEX
(這樣一個「女」在Partners.Missing
將NAsOnly
匹配到一個「男」 ) - 中的「女性」夥伴(無論哪個數據幀的它們起源)是在相同的年齡段,或一個年輕的,比「男性」夥伴
- 的
Inhabitants
數爲完全匹配,以使得來自5人家庭的「女性」只能與來自5人家庭的「男性」(正確的年齡段)匹配 - 在
NAsOnly
RELATIONSHIP
只能是「合作」(「非結成夥伴的」和「不包括其他地方」,可以在該數據幀有效的變量條目)*。
所以我想要一對一的比賽,我需要比賽是一個隨機抽籤,而不是第一個可用。並且做這195次,每次觀察Partners.Missing
一次,以便他們的伴侶不再失蹤。
我不能使用第一個或最後一個匹配,因爲根據我的標準,NAsOnly
可能有很多行匹配 - 它必須是隨機抽取,否則每次都會抽取相同的觀察值NAsOnly
。基本上,像從NAsOnly
替換隨機抽樣。使用採樣觀察值構造第三個匹配數據幀還是將採樣觀察值作爲附加列添加到Partners.Missing
無關緊要。
*它有四個級別與原始較大的數據幀已經總計行,所以第四個(和未使用的)電平爲「總計」。
更新: 我試圖寫一個爲下一個循環做到這一點,但預期它不工作。的代碼是:
for(i in 1:1) {
row <- Partners.Missing[i,]
if(row$V1=="Female")
matched <- data.frame(row$SEX[i]==Partnered.Censored$SEX &
row$Inhabitants[i]==Partnered.Censored$Inhabitants &
(row$Ageband[i]==Partnered.Censored$Ageband | row$Ageband[i]==Partnered.Censored$Ageband+1)
)
else
matched <- data.frame(row$SEX[i]==Partnered.Censored$SEX &
row$Inhabitants[i]==Partnered.Censored$Inhabitants &
(row$Ageband[i]==Partnered.Censored$Ageband | row$Ageband[i]==Partnered.Censored$Ageband-1)
)
}
此輸出單個柱成data frame
稱爲matched
與TRUE
或FALSE
如在277行的單一列的輸入,表示該行的在Partnered.Censored
索引是否爲匹配或沒有。一旦我把i的最大值增加到2(知道我有195行),我得到NA
作爲輸出。我有剩餘存在以下問題:
- 我希望用行(S),從
Partnered.Censored
匹配,而不是輸出一個布爾結果 - 我則想從匹配的行隨機抽樣產生的新的合作伙伴
- 然後重複爲
Partners.Missing
中的每一行。
我也有問題在哪裏增加最大值i
,例如,到2,將覆蓋TRUE/
FALSE values with
NA`的單列。