R语言 是否有基于变量观测值合并数据集的命令?

rfbsl7qr  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(128)

我试图合并两个数据集,这取决于对数据集的观察。
换句话说,我有两个数据集,都包含年份和州。但是,这两个数据集各包含一个额外变量,X1表示df1,X2表示df2。也就是说,如果观察到一个州的X1和X2至少有5个观察值,我将尝试合并这两个数据集,以便包括该州的所有观察值。即使X1和X2都是NA值。
是否有方法合并数据集,以便仅合并X1和X2都具有最少5个观测值的州?这样,新数据集就具有X1和X5都具有最少5个观测值的州的所有年份的观测值,而排除其余年份。
我尝试过使用inner_join(df1,df2)进行实验,但没有成功,因为它只合并了年份和状态,两个特定数据集都有单独的观察结果。
合并效应的一个可重现的例子(为了简单起见,我使用了如果2个观测值为非NA,则包括状态)

df1 = read.table(
  text =
    "State Year X1
A 1 NA 
A 2 NA 
A 3 5 
A 4 NA 
B 1 NA 
B 2 NA 
B 3 4 
B 4 3", header = TRUE)

df2 = read.table(
  text =
    "State Year X2
A 1 NA 
A 2 5 
A 3 7 
A 4 NA 
B 1 NA 
B 2 2 
B 3 5 
B 4 7", header = TRUE)

newdf = read.table(
  text =
    "State Year X1 X2
B 1 NA NA 
B 2 NA 2
B 3 4 5
B 4 3 7", header = TRUE)

这里,newdf忽略状态A,因为df1仅具有针对该状态的一个观测,而针对状态B包括所有年份(即使是X1X2均为NA的第一年),因为X1X2均具有针对该状态的2个非NA观测的最小值。(回想一下,为简单起见,此处的最小观测值为2而非5)

8zzbczxx

8zzbczxx1#

您需要在合并后做进一步的过滤。

library(dplyr)

inner_join(df1, df2, by = c("State", "Year")) %>%
  group_by(State) %>%
  filter(if_all(X1:X2, ~ sum(!is.na(.x)) >= 2)) %>%
  ungroup()

# # A tibble: 4 × 4
#   State  Year X1    X2   
#   <chr> <int> <chr> <chr>
# 1 B         1 NA    NA   
# 2 B         2 NA    2    
# 3 B         3 4     5    
# 4 B         4 3     7

相关问题