2015-10-25 41 views
0

這是我的R代碼示例,目前正在審查有關學術不端行爲的副項目。如何將多個描述性變量合併到新變量中

每個AMC$ExamMC[x]因子被認爲是一個二分變量,其結果是「是」和「否」是犯下學術不端行爲的罪行。你可以看到,我嘗試使用merge函數,我試圖使用ifelse函數來獲得正確的觀察值,但似乎沒有任何工作。我如何去添加「這些條件中的任何一個都足夠」子句來使這個新變量起作用?

AMC$ExamMCH<-AMC$Exams_H 
AMC$ExamMCH<-factor(NA,levels=c("yes", "no")) 
AMC$ExamMCH[AMC$Exams_H=="2-4 times"]<-"yes" 
AMC$ExamMCH[AMC$Exams_H=="0 times"]<-"no" 
summary(AMC$ExamMCH) 

AMC$ExamMCI<-AMC$Exams_I 
AMC$ExamMCI<-factor(NA,levels=c("yes", "no")) 
AMC$ExamMCI[AMC$Exams_I==">4 times"|AMC$Exams_I=="2-4 times"|AMC$Exams_I=="1 time"]<-"yes" 
AMC$ExamMCI[AMC$Exams_I=="0 times"]<-"no" 
summary(AMC$ExamMCI) 

AMC$ExamMC<-merge(AMC$ExamMCA, AMC$ExamMCB, AMC$ExamMCC, AMC$ExamMCD, AMC$ExamMCE, AMC$ExamMCF, AMC$ExamMCG, AMC$ExamMCH, AMC$ExamMCI by="yes") 
AMC$ExamMC<-factor(NA,levels=c("committed AMC", "hasn't committed AMC")) 
AMC$ExamMC[AMC$ExamMCA=="yes"& AMC$ExamMCB=="yes"& AMC$ExamMCC=="yes" AMC$ExamMCD=="yes"|AMC$ExamMCE=="yes"|AMC$ExamMCF=="yes"|AMC$ExamMCG=="yes"|AMC$ExamMCH=="yes"|AMC$ExamMCI=="yes"]<-"committed AMC" 
AMC$ExamMC[AMC$ExamMCA=="no"|AMC$ExamMCB=="no"|AMC$ExamMCC=="no"|AMC$ExamMCD=="no"|AMC$ExamMCE=="no"|AMC$ExamMCF=="no"|AMC$ExamMCG=="no"|AMC$ExamMCH=="no"|AMC$ExamMCI=="no"]<-"hasn't committed AMC" 
summary(AMC$ExamMC) 
+1

提供一個小*可重現的例子將使它很容易回答你的問題。 – RobertH

+0

變量AMC $ Exams_A-AMC $ Exams_I都是觀測值爲「> 4次」「2-4次」「1次」或「0次」的變量,我試圖將所有變量AI重新編碼爲二分值「是「或」否「來模仿榮譽守則行爲規則的嚴格性質。 –

+0

然後,我試圖將所有變量(AMC $ Exams_A到AMC $ Exams_I)合併成一個標記爲AMC $ ExamMC的考試不當變量變量,條件是來自組合值的任何值是「是」將該觀察置於「有承諾的學術不端行爲(AMC)「,並且對於」沒有實施AMC「,它將要求組合變量的所有」否「值。我很抱歉這不是一個可重複的樣本,但變量來自已組織的數據集 –

回答

0

merge()一般用於鏈接記錄跨越多個數據幀的公共密鑰,你在一個數據庫會的方式。由於我們需要的所有數據都在一個數據框中,因此我們只需要一些二進制邏輯。

我認爲,如果你試圖將考試成績比串邏輯值(TRUE/FALSE)("yes"/"no")結合起來,你會發現這是一個容易得多。您可以將字符串"TRUE""FALSE"上的variations轉換爲邏輯。因此,這裏是我的建議:

# convert raw exam results to binary outcomes 
AMC$ExamMCH = character(nrow(AMC)) 
AMC$ExamMCH[AMC$Exams_H == "2-4 times"] = "TRUE" 
AMC$ExamMCH[AMC$Exams_H == "0 times"] = "FALSE" 
AMC$ExamMCH = as.logical(AMC$ExamMCH) 

# [do the same for $ExamMCI and others] 

# combine these into a column that is true if all of the others is 
AMC$ExamMC = all(
    AMC$ExamMCA, AMC$ExamMCB, AMC$ExamMCC, AMC$ExamMCD, AMC$ExamMCE, 
    AMC$ExamMCF, AMC$ExamMCG, AMC$ExamMCH, AMC$ExamMCI) 

然後可以轉換回字符,如果你想爲圖表或報表漂亮的標籤(如"Committed AMC")。如果您需要更復雜的邏輯,以二元變量組合在一起,你也可以使用any(),或者您也可以只使用&(AND)和|(OR)運算符,如:

AMC$ExamMC = AMC$ExamMCG == TRUE & AMC$ExamMCH == FALSE | AMC$ExamMCI == TRUE 

...但在那指出你可能不會費心轉換爲邏輯,因爲相等運算符(==)可以很容易地檢查字符串。這有幫助嗎?

+0

是的非常感謝你! –