2015-10-25 39 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

是的非常感谢你! –