用于圆形后缀的面板数据的reshape()的tidyverse替换

时间:2017-11-02 05:21:04

标签: r reshape tidyverse

此示例中tidyverse的{​​{1}}替换是什么?我希望宽版本采用该轮次的名称:reshape()v2.1。我认为它应该是v2.2,但我还没弄明白。

gather()

已更新示例,其中包含跨数据集的不平衡行。

library(tidyverse)
r1 <- data.frame(id=c(1, 2, 3),
                 v1=c(1, 1, 0),
                 v2=c(0, 1, 1),
                 round=c(1, 1, 1))

r2 <- data.frame(id=c(1, 2, 3),
                 v2=c(1, 0, 0),
                 round=c(2, 2, 2))

r12 <- bind_rows(r1, r2)

r12w <- reshape(r12,
                timevar = "round",
                v.names = "v2",
                idvar = "id",
                direction = "wide")
r12w

#  id v1 v2.1 v2.2
#1  1  1    0    1
#2  2  1    1    0
#3  3  0    1    0

这模仿了小组调查,其中有些人在以后的轮次中没有被发现/拒绝。此处,人员4位于r1 <- data.frame(id=c(1, 2, 3, 4), v1=c(1, 1, 0, 0), v2=c(0, 1, 1, 1), round=c(1, 1, 1, 1)) r2 <- data.frame(id=c(1, 2, 3), v2=c(1, 0, 0), round=c(2, 2, 2)) ,但不是r1。我们希望将此人保留在最终数据集中,但具有r2的NA值。这是所需的输出。寻找从v2r1到此输出的整个方法。

r2

2 个答案:

答案 0 :(得分:1)

我们在&#39; r2&#39;中创建了缺失的列。在执行bind_rows之前,通过从&#39; r1&#39;中分配该列。为此,我们可以使用setdiff来获取在&#39; r1&#39;中找到的列。而不是在&#39; r2&#39;。然后,paste字符串&#39; v2。&#39;用&#39; round&#39;列和spread到&#39;宽&#39;格式

m1 <- setdiff(names(r1), names(r2))
r2[nm1] <- r1[nm1]
bind_rows(r1, r2) %>%
      mutate(round = paste0("v2.", round)) %>%
      spread(round, v2)
#  id v1 v2.1 v2.2
#1  1  1    0    1
#2  2  1    1    0
#3  3  0    1    0

注意:这里,我们假设数据集具有相同的行数

答案 1 :(得分:1)

我不确定我完全明白你想要什么,但这是一次尝试:

AppliedRoutes