2015-12-04 22 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

谢谢你的回答!这真的有助于我了解我出错的地方。我感谢帮助! –

相关问题