[英]Keeping only common rows in all groups
我有一个包含十组的数据集。 某些组中缺少某些观察值(行)。 我只想保留每个组中常见的观察结果。 我试着做一个最小的例子。 在那个例子中,我做了三个组。 在第一组中,缺少一个观察结果。 因此 output 我应该在每组中会有两个观察结果。
library(tidyverse)
## data_set
test_df<-data.frame(groups=c(1,1,1,2,2,2,3,3,3),date=as.Date(c("2000-01-01","2000-01-02","2000-01-03","2000-01-01","2000-01-02","2000-01-03","2000-01-01","2000-01-02","2000-01-03")),data=c(1,2,NA,3,4,5,6,7,8))
## required_output
## keeping data only with common dates
test_df_new<-test_df[c(1,2,4,5,7,8),]
## groups
test_df_new<-test_df%>%
group_by()%>%
首先,我在数据列中找到了带有 NA 的日期:
test_df$date[is.na(test_df$data)]
然后我通过dplyr过滤:
test_df %>% filter(date != test_df$date[is.na(test_df$data)])
删除数据为 NA 的日期,然后在组中获取剩余日期的交集,然后过滤:
ix <- which(!is.na(test_df$data))
test_df[ test_df$date %in%
Reduce(intersect,
split(test_df$date[ ix ], test_df$groups[ ix ])), ]
# groups date data
# 1 1 2000-01-01 1
# 2 1 2000-01-02 2
# 4 2 2000-01-01 3
# 5 2 2000-01-02 4
# 7 3 2000-01-01 6
# 8 3 2000-01-02 7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.