【问题标题】:Rearrange and merge a dataset of sequences based on days根据天数重新排列和合并序列数据集
【发布时间】:2015-08-11 04:55:42
【问题描述】:

我正在研究一个数据集,人们必须在其中填写两天的活动。

问卷 1 旨在记录第 1 天和第 2 天的问卷 2。 但有些受访者填写了问卷 1 的第 2 天和问卷 2 的第 1 天。

所以基本上我想要的是重新排列和合并(或合并和重新排列)数据,以便为每个受访者提供第一天和第二天的数据。

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 有一个简单的解决方案来重新排列数据框。

有什么解决办法吗?

【问题讨论】:

  • 您可能想将您想要的结果添加到问题中 - 我不清楚您想要什么。
  • 如果您将示例更改为 paste0 而不是 paste,您将拥有合法的 R 变量名称。

标签: r merge dataframe data.table dplyr


【解决方案1】:

您不需要dplyr,而merge 不是这项工作的正确工具。只需 rbind 您的数据集,然后对它们进行排序。

all.data <- rbind(seq1, seq2)
all.data <- all.data[order(all.data$day),]

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 2018-02-24
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2021-08-04
    • 2023-03-16
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多