我想拆分然后合并配对数据集。
我的数据如下:
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
)中观察到的两个不同变量(tuconjoint
和tutv
)。
我要做的是拆分,然后合并两个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")
答案 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'))