根据天数重新排列并合并序列数据集

时间:2015-05-28 15:20:06

标签: r merge dataframe data.table dplyr

我正在开发一个数据集,人们必须在这里填充两天的活动。

调查问卷1旨在捕获第1天,第2天调查问卷2。 但是一些受访者在调查问卷1的第1天和第1天填写了第2天。

基本上我想要的是重新排列和合并(或合并和重新排列)数据,以便为每个受访者提供第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有一个简单的解决方案来重新排列数据帧。

任何解决方案?

1 个答案:

答案 0 :(得分:2)

您不需要public int selectSong() { Scanner menu = new Scanner(System.in); for (int i=0;i<logicalSize;i++){ System.out.println("[" + i + "] Title: " + songs[i].getName() + " Artist: " + songs[i].getArtist()); } System.out.println("Select a song by entering its song number (0, 1, 2...)."); int songChoice = menu.nextInt(); return songChoice; } ,而dplyr不适合此工作。只需merge您的数据集,然后对它们进行排序。

rbind