我想在 group_by 操作后对两个表执行联接。
A <- data.frame(x1=c("a","b","c","d"))
B <- data.frame(x1=c("a","c","d","c","a"), x2=c(1,1,1,2,2))
Run Code Online (Sandbox Code Playgroud)
这个想法是 x2 是一个 ID,x1 可能是一个日期之类的东西,并且可能还有其他温度值列。表A
包含所有日期并B
包含实际观察结果。当没有观察时,我希望最终得到一个包含 NA 的所有 ID 的所有日期的表格。以下命令生成:
> dplyr::left_join(A,B,by="x1")
x1 x2
1 a 1
2 a 2
3 b NA
4 c 1
5 c 2
6 d 1
Run Code Online (Sandbox Code Playgroud)
但我想要的东西更像是:
x1 x2
a 1
a 2
b NA
b NA
c 1
c 2
d 1
d NA
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这个但没有成功:
B %>% dplyr::group_by(x2) %>% dplyr::left_join(A,.data,by="x1")
Run Code Online (Sandbox Code Playgroud)
如果可能的话,保留group_by(x2)
对我来说真的很有用
一种方法是添加一个变量来计算 的观测值数量x1
,然后使用 来完成 data.frame tidyr::complete
。
require(dplyr)
left_join(A, B, by="x1") %>%
# add variable "obs"
group_by(x1) %>%
mutate(obs = seq(n())) %>%
ungroup %>%
# complete the data
tidyr::complete(x1, obs) %>%
select(-obs)
Run Code Online (Sandbox Code Playgroud)
来源:本地数据框 [8 x 2]
## x1 x2
## (chr) (dbl)
## 1 a 1
## 2 a 2
## 3 b NA
## 4 b NA
## 5 c 1
## 6 c 2
## 7 d 1
## 8 d NA
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5862 次 |
最近记录: |