R - 拆分和合并配对数据集

时间:2015-12-23 10:16:18

标签: r merge split

我想拆分然后合并配对数据集。

我的数据如下:

  idno Q2   variable time    value
1  561 56 tuconjoint    1     fait
2  562 56 tuconjoint    1     fait
3  561 56 tuconjoint    2     fait
4  562 56 tuconjoint    2     fait
5  561 56       tutv    1 non fait
6  562 56       tutv    1 non fait
7  561 56       tutv    2 non fait
8  562 56       tutv    2 non fait

所以它是由两个人(idno)属于一对(Q2)在两集(time)中观察到的两个不同变量(tuconjointtutv)。

我要做的是拆分,然后合并两个variables

我找到了第一部分:

split(dtAct, dtAct$variable) 

这给了我两个清单。

我试过这个似乎有效,但没有给我一个平稳的输出:

split(dtAct, dtAct$variable) %>% as.data.frame()

我想要的输出就像是

     idno  Q2 time  variableA    valueA  variableB  valueB 
1    561  56   1    tuconjoint    fait    tutv      non fait
2    562  56   1    tuconjoint    fait    tutv      non fait
3    561  56   2    tuconjoint    fait    tutv      non fait
4    562  56   2    tuconjoint    fait    tutv      non fait

有任何线索吗?

dtAct = structure(list(idno = c(561, 562, 561, 562, 561, 562, 561, 562
), Q2 = c(56, 56, 56, 56, 56, 56, 56, 56), variable = structure(c(1L, 
1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("tuconjoint_1", "tuconjoint_2", 
"tutv_1", "tutv_2"), class = "factor"), value = c("fait", "fait", 
"fait", "fait", "non fait", "non fait", "non fait", "non fait"
)), row.names = c(NA, -8L), .Names = c("idno", "Q2", "variable", 
"value"), class = "data.frame")

2 个答案:

答案 0 :(得分:2)

我们可以尝试

library(tidyr)
dt1 <- separate(dtAct, variable, into=c('var', 'time')) 
Reduce(function(...) merge(..., 
           by = c('idno', 'Q2', 'time')), split(dt1, dt1$var))

答案 1 :(得分:2)

如果您创建拆分列表

new Exception("ex1")

您可以将列表中的对象称为

dtList <- split(dtAct, dtAct$variable)

因此您可以将两个数据框合并为

dtList$tuconjoint
dtList$tutv

,结果将是

dtRes <- merge(dtList$tuconjoint, dtList$tutv, by=c('idno','Q2','time'),
           suffixes = c('A','B'))