【发布时间】: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