2013-06-06 2 views
-1

Я анализирую результаты эксперимента в CSV-файле с переменными как столбцы и участники в виде строк. Прежде чем все мои данные будут собраны, я хотел бы провести предварительный анализ данных, которые у меня уже есть. Однако мне нужно исключить некоторых из моих участников из анализа. Лучший способ, с помощью которого я пришел, сделать это, не удаляя их данные (что может вызвать проблемы для меня позже), - это создать новый столбец, называть его «исключать» и вводить либо 1, либо 0 для каждого участника для определения который должен быть исключен. Затем, когда я запускаю статистику, я просто делаю это на подмножестве своих данных (например, exclude == 0).Объединение данных в R

Проблема возникает, когда я загружаю полный набор данных - как мне получить данные из моего столбца «exclude» предварительного набора данных на полный набор данных, чтобы убедиться, что все 0 и 1 привязаны к правильным участникам? Я могу видеть, как я могу просто скопировать и вставить, если строки предварительных и полных наборов данных находятся в одном и том же порядке, но это кажется склонным к ошибке, и для создания столбца exclude намного проще сортировать по разным столбцам , Я пробовал rbind и merge, но они не работают, насколько я могу судить.

Вот пример того, что я пытаюсь сделать:

prelim <- data.frame(
participant = c(1,2,3), 
exclude = c(0,1,0) 
) 

full = data.frame(
participant = c(1,2,3,4,5), 
exclude = c(NA,NA,NA,NA,NA) 
) 

ideal = data.frame(
participant = c(1,2,3,4,5), 
exclude = c(0,1,0,NA,NA) 
) 
+4

Я предполагаю (в отсутствие примера), что проблемы у вас возникают из стволовых используя 'attach'. Если вы перестанете использовать 'attach' и вместо этого используйте' with', 'subset' и' [', вы избавитесь от огромной путаницы из-за специфических возможностей, созданных' attach'. –

+1

Совет Heed @ DWin, но без воспроизводимого примера (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) невозможно быть более полезным – alexwhan

+0

Спасибо за ответы. Я включил упрощенный пример выше, где NAs пусты. Двин, я не пользовался приложением. Intra, когда я пытаюсь выполнить функцию слияния, он делает 2 копии всех столбцов, когда я хочу, чтобы все столбцы оставались неизменными. Я не могу понять ваш код с% in%. Я никогда не использовал этот оператор.Возможно, усложнение вопроса заключается в том, что я создаю столбец exclude в excel, вручную введя данные, а создавая столбец в R, используя if или ifelse. Это может быть проблемой? – user2461563

ответ

0

Есть несколько подходов, я бы смотреть на, учитывая, что мы не можем видеть ваши данные.

Вы могли:

Импортные оба набора данных и создать свое исключение переменного в зависимости от состояния и merge с вашим полным набором данных на основе идентификатора участника. Такие, как:

merge(preliminarydata, completedata, by.x='participantid', by.y='participantid') 

Или завершить вашу исключить переменную без слияния с помощью оператора %in%.

peopletoexclude <- which(participantsinfulldata %in% participantsinpreliminarydata) 
myfulldataset$exclude <- 0 
myfulldataset$exclude[peopletoexclude] <- 1 

Или, возможно, миллион других вещей, о которых люди могут думать.

Или просто отбросьте людей, которых вы хотите исключить, и выполните предварительный анализ. Стоит отметить, что, если вы явно не указали write.csv поверх старого CSV-файла, любая обработка данных, которую вы делаете в R, никак не влияет на исходный CSV. Он загружается в данные, а затем забывает о вашем CSV. Если вам нужно сохранить свой анализ, вы можете save(myDatainR, file="myDatainR.Rdata") и вернуться к нему в любое время.

0

попытаться объединить

d <- merge(prelim, full, all = T) 
d[!duplicated(d[,1]), ] 

или вы можете быть заинтересованы в data.table:

library(data.table) 
DF1<-data.frame(x=1:3,y=4:6,t=10:12) 
DF2<-data.frame(x=3:5,y=6:8,s=1:3) 
library(data.table) 
DF1 <- data.table(DF1, key = c("x", "y")) 
DF2 <- data.table(DF2, key = c("x", "y")) 
DF2[DF1] # for example 
DF1[!DF2] # or maybe you want this? 
DF2[!DF1] 
Смежные вопросы