2015-12-04 2 views
1

набора данных, используемый в этом Google Таблицах ссылке 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 строк кода, чтобы перекодировать все 9 из Exams_A через переменные Exams_I в логические двоичные исходы «Истины» для тех, кто ответил 1 или более раз для любой из этих 9 переменных. Я хотел бы объединить все эти переменные в новый столбец в наборе данных, в котором для каждой строки наблюдения, если есть хоть один случай, который является «истинным» для любого из 9 экзаменов_А через 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 «ложных» случаев, хотя другие переменные могут содержать «True» в качестве выходных данных.

EDIT

я теперь создал фрейм данных для набора экзаменационных переменных неправомерные

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 типов нечестного экзамена, записанного в наборе данных, если еще (например, если нет «истинных» выходов для любого из 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) части этой последней строки кода, есть ли страница, где я могу прочитать об использовании функции (Икс)? –

+0

Я на самом деле просто запустил код без '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Я обновил код, чтобы показать это. Вы можете посмотреть на '? 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), который является (logical) TRUE, если он закодирован в данных как 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

спасибо за ваш ответ! это действительно помогает понять, где я ошибся. Я ценю помощь! –

Смежные вопросы