2015-05-28 2 views
0

Я работаю над набором данных, где люди должны были заполнять мероприятия в течение двух дней.Переупорядочить и объединить набор данных по дням

Анкета 1 был разработан, чтобы захватить день 1 и 2 вопросника за день 2. Но некоторые респонденты заполнены день 2 в анкете 1 и 1 день в анкете 2.

Поэтому в основном то, что я хочу, чтобы изменить и объединить (или объединить и переупорядочить) данные для того, чтобы каждый день первый и второй день получал данные для каждого респондента.

seq1 = as.data.frame(rbind(c(1, 1, 1, 'a', 'a', 'b', 'c'), 
          c(2, 1, 1, 'a', 'a', 'b', 'd'), 
          c(3, 1, 2, 'c', 'd', 'b', 'a'), 
          c(4, 1, 2, 'c', 'a', 'b', 'e'))) 
colnames(seq1) <- c('id', 'quest', 'day', paste('act',1:4)) 

seq2 = as.data.frame(rbind(c(1, 2, 2, 'a', 'a', 'b', 'd'), 
          c(2, 2, 2, 'c', 'a', 'b', 'c'), 
          c(3, 2, 1, 'a', 'd', 'b', 'c'), 
          c(4, 2, 1, 'd', 'a', 'b', 'c'))) 
colnames(seq2) <- c('id', 'quest', 'day', paste('act',1:4)) 

# seq1 
    id quest day act 1 act 2 act 3 act 4 
1 1  1 1  a  a  b  c 
2 2  1 1  a  a  b  d 
3 3  1 2  c  d  b  a # Mistake here 
4 4  1 2  c  a  b  e # Mistake here 

# seq 2 
    id quest day act 1 act 2 act 3 act 4 
1 1  2 2  a  a  b  d 
2 2  2 2  c  a  b  c 
3 3  2 1  a  d  b  c # Mistake here 
4 4  2 1  d  a  b  c # Mistake here 

Поэтому я хотел бы объединить свои данные, чтобы поставить 1-й и 2-й день после каждого другого.

merge(seq1, seq2, by = 'id', suffixes = c('_day1', '_day2')) 

Я хотел бы иметь набор данных, похожий на этот, но с правильной перестановкой дней.

id quest_day1 day_day1 act 1_day1 act 2_day1 act 3_day1 act 4_day1 quest_day2  day_day2 act 1_day2 act 2_day2 act 3_day2 act 4_day2 
1 1   1  1   a   a   b   c    2  2   a   a   b   d 
2 2   1  1   a   a   b   d    2  2   c   a   b   c 
3 3   1  2   c   d   b   a    2  1   a   d   b   c 
4 4   1  2   c   a   b   e    2  1   d   a   b   c 

Уверен, что существует простое решение с dplyr для изменения блока данных.

Любое решение?

+3

Возможно, вы захотите добавить желаемый результат на вопрос - мне непонятно, чего вы хотите. – eddi

+1

Если вы измените свой пример на 'paste0' вместо' paste', у вас будут законные имена переменных R для работы. –

ответ

2

dplyrmerge не подходит для этой работы. Просто rbind ваши наборы данных, а затем отсортируйте их.

all.data <- rbind(seq1, seq2) 
all.data <- all.data[order(all.data$day),] 
Смежные вопросы