此示例中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值。这是所需的输出。寻找从v2
和r1
到此输出的整个方法。
r2
答案 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