繁体   English   中英

仅保留所有组中的公共行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM