将同一数据集中具有相同值的变量列合并为一个新变量

时间:2015-12-04 05:51:24

标签: r merge cbind

正在使用的数据集位于此Google工作表链接中 https://docs.google.com/spreadsheets/d/1eV33Sgx_UVtk2vDtNBc4Yqs_kQoeffY0oj5gSCq9rCs/edit#gid=1959019385&vpid=A1

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行代码将所有9个Exams_A通过Exams_I变量重新编码为&#34; True&#34;的逻辑二进制结果。对于那些对这9个变量中的任何一个回答了1次或更多次的人。我想将所有这些变量组合到数据集中的新列中,对于每个观察行,如果甚至有一个案例是&#34; true&#34;对于整行中的9个exams_A到I中的任何一个,新的变量结果将读为&#34; true&#34;这意味着他们至少曾经在数据集中记录了9种类型的考试学术不端行为。如果在观察行中没有真正的结果,我希望新的变量结果读作&#34; false&#34;意思是他们(观察行)从未犯过考试学术不端行为

我对这个新变量的代码是

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

但是这个设置似乎被字符串中的最后一个变量大小写(AMC.dataset $ ExamMC.I)

1 个答案:

答案 0 :(得分:1)

这是一种方法:

a <- c("0 times", "1 time", "2-4 times", ">4times")
b <- rev(c("0 times", "1 time", "2-4 times", ">4times"))
df <- data.frame(a, b)
df2 <- apply(df, 2, function(x) x %in% "0 times") ## you can also use x == "0 times". 
## %in% allows using vectors, i.e. x %in% c("0 times", "1 times")

apply(df2, 1, any)
# [1]  TRUE FALSE FALSE  TRUE

将最后一行扩展到data.frame:

dataset$new.variable <- apply(dataset[c("variable1.new", "variable2.new", 
"variable3.new", "variable4.new", "variable5.new", "variable6.new", 
"variable7.new", "variable8.new", "variable9.new")], 1, any)