2015-12-04 46 views
1

數據集被用於在該谷歌片鏈路 https://docs.google.com/spreadsheets/d/1eV33Sgx_UVtk2vDtNBc4Yqs_kQoeffY0oj5gSCq9rCs/edit?usp=sharing用相同的值列變量組合成一個新的變量

AMC.dataset$ExamMC.A<-surveySP15$Exams_A 
AMC.dataset$ExamMC.A<-factor(NA, levels=c("TRUE", "FALSE")) 
AMC.dataset$ExamMC.A[AMC.dataset$Exams_A=="1 time"|AMC.dataset$Exams_A=="2-4 times"|AMC.dataset$Exams_A==">4 times"]<-"TRUE" 
AMC.dataset$ExamMC.A[AMC.dataset$Exams_A=="0 times"]<-"FALSE" 
AMC.dataset$ExamMC.A=as.logical(AMC.dataset$ExamMC.A) 

我使用這些5行的代碼重新編碼通過Exams_I變量Exams_A的全部9對於那些爲這9個變量中的任何一個回答了1次或更多次的人而言,都是「真」的邏輯二進制結果。我希望將所有這些變量組合到數據集中的新列中,對於每個觀測行,如果在整行中9個檢查_A至I中的任何一個都有「真」,則新變量結果將被視爲「真實」,這意味着他們至少有一次承諾記錄在數據集中的任何9種類型的考試學術不端行爲。如果在觀察行中沒有真正的結果,我希望新的變量結果爲「假」,這意味着他們(觀察行)從未提交過考試學術不端行爲

我對這個新變量的代碼是什麼

AMC.dataset$ExamMC = any(AMC.dataset$ExamMC.A, AMC.dataset$ExamMC.B, AMC.dataset$ExamMC.C, AMC.dataset$ExamMC.D, AMC.dataset$ExamMC.E, AMC.dataset$ExamMC.F, AMC.dataset$ExamMC.G, AMC.dataset$ExamMC.H, AMC.dataset$ExamMC.I) 

但是這個代碼已被串(AMC.dataset $ ExamMC.I)在最後一個變量輸出,其中有215假案和0真正覆蓋,將覆蓋字符串的其餘部分給予215個「假」情況的新變量輸出,即使其他變量可能保持「真」作爲它們的情況輸出。

編輯

我現在已經創建了一套考試的不當行爲變量的數據幀

AMC.dataset$ExamMCdf<-data.frame(AMC.dataset$ExamMC.A, AMC.dataset$ExamMC.B, AMC.dataset$ExamMC.C, AMC.dataset$ExamMC.D, AMC.dataset$ExamMC.E, AMC.dataset$ExamMC.F, AMC.dataset$ExamMC.G, AMC.dataset$ExamMC.H, AMC.dataset$ExamMC.I) 

現在我的問題是如何去在一個新的列創建複合變量正確通讀每一個觀察行,在數據框中將任何具有單個「真」結果的行標記爲複合變量的「真」。任何沒有「真實」結果的觀察行應該被複合變量標記爲「假」。

感謝您的幫助。

+0

我想這將有點像一個ifelse語句,所以,新的複合變量將顯示爲「真」如果觀察行已記錄的「真」的任何如果其他情況(如果9種學術不端行爲中的任何一種沒有「真實」輸出),那麼新的複合變量將被讀作「假」,如在該觀察行中所具有的那樣沒有犯過任何類型的考試不當行爲。 –

+0

或者作爲合併函數? –

+0

電子數據表不公開共享或鏈接訪問 – MichaelChirico

回答

0

,製造複合一行檢查中的其它數據幀列的任何真實值,使用any()功能包裹在apply()去逐行。我想你可以把它應用到您的情況:

#Makes a dataframe with TRUE/FALSE values and a low chance for TRUE 
set.seed(123) 
data <- data.frame(
    Exams_A = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)), 
    Exams_B = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)), 
    Exams_C = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)), 
    Exams_D = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)), 
    Exams_E = rep(TRUE,10) # Inserts row of all TRUE's to show that you can limit scope 
) 

data$ExamMC <- apply(data[, 1:4], 1, function(x) any(x)) 
data$ExamMC <- apply(data[, 1:4], 1, any) # This is the updated version 
          #^This part sets what columns you want to search 
+0

感謝您的回答!我發現這對我很有幫助,所以我感謝你的幫助。這兩個答案給了我一個更好的理解R一般 –

+0

我很難找到功能(x)的最後一行代碼的正確使用的一部分,是否有一個頁面,我可以閱讀函數的使用( X)? –

+0

我實際上只運行了沒有'function(x)'部分的代碼,只要你從'any'_中刪除'(x)',它就會工作。我更新了代碼以顯示此內容。你可以看''apply'獲取更多信息,但我的理解是,如果你將某些東西傳遞給你使用'apply()'調用的函數,或者想讓你自己的函數接收該行作爲要處理的數據,則需要加入'function(x)...'位。 –

0

我不是100%肯定你後的東西,但在這裏就是我會做什麼,我覺得你心裏已經有了:

library(data.table) 
setDT(surveySP15) 

exams <- paste0("Exams_", LETTERS[1:9]) 
surveySP15[ , paste0(exams, "_binary") := 
      lapply(.SD, function(x) x %in% c("1 time", "2-4 times", ">4 times")), 
      .SDcols = exams] 

這將爲每門考試的變量(如,Exams_A_binary)(logicalTRUE(如果它在數據中被編碼爲1或更多時間),否則FALSE。下面是相關的輸出:

> surveySP15[ , paste0(exams, "_binary"), with = FALSE] 
    Exams_A_binary Exams_B_binary Exams_C_binary Exams_D_binary Exams_E_binary Exams_F_binary Exams_G_binary 
    1:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
    2:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
    3:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
    4:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
    5:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
---                           
223:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
224:   TRUE   TRUE   TRUE   FALSE   TRUE   FALSE   FALSE 
225:   FALSE   TRUE   FALSE   FALSE   FALSE   FALSE   FALSE 
226:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
227:   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
    Exams_H_binary Exams_I_binary 
    1:   FALSE   FALSE 
    2:   FALSE   FALSE 
    3:   FALSE   FALSE 
    4:   FALSE   FALSE 
    5:   FALSE   FALSE 
---        
223:   FALSE   FALSE 
224:   FALSE   FALSE 
225:   FALSE   FALSE 
226:   FALSE   FALSE 
227:   FALSE   FALSE 
+0

謝謝你的回答!這真的有助於我瞭解我出錯的地方。我感謝幫助! –

相關問題