2015-05-28 87 views
0

我正在处理人们不得不填充活动两天的数据集。重新排列和合并基于天的序列数据集

问卷1被设计来捕捉1日和2日 问卷2但是,一些受访者在问卷填写2天的调查问卷1和1天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),]