R 数据帧中的子集特定行,但保留观察值

R 数据帧中的子集特定行,但保留观察值,r,dataframe,subset,rows,R,Dataframe,Subset,Rows,我有一个像这样的数据框 y = data.frame(subdel = c(1, 2, 3, 1, 57, 14, 1, 2, 57, 57, 57, 3, 1, 1, 31, 21, 34, 56, 12, 45, 1, 63, 31, 34), muni = c("A01", "A83", "A40", NA, NA, NA, NA, NA, NA, NA, NA, "A45", "B26&

我有一个像这样的数据框

y = data.frame(subdel = c(1, 2, 3, 1, 57, 14, 1, 2, 57, 57, 57, 3, 1, 1, 
  31, 21, 34, 56, 12, 45, 1, 63, 31, 34), muni =  c("A01",  "A83", "A40", NA, NA, NA, NA, NA, NA, NA, NA,  "A45", "B26", "B42","B61", "B70", "B90", "C53", "C89","A45", "B26", "B42","B61", "B70"))
我期待着下一个结果:

z=data.frame(subdel=c(1,2,3,57,57,57,57,3,1,1,31,21,34,56,12,45,1,63,31,34),muni=c(“A01”,“A83”,“A40”,NA,NA,NA,NA,NA,“A45”,“B26”,“B42”,“B61”,“B70”,“B90”,“C53”,“C89”,“A45”,“B26”,“B42”,“B61”,“B70”))
我想将
subdel==57
muni==NA
匹配,但是,正如您所看到的,保存数据帧中的所有其他观察值


任何帮助都将不胜感激。

我们可以使用带有逻辑条件的
子集
,即检查'muni'(
is.NA(muni)
)和(
&
)中的
NA
,其中'subdel'为57(
subdel==57
)或'muni'(
!is.NA(muni)
)中的所有其他非NA元素


x==NA
永远不会给你想要的
1==NA
NA==NA
“A”==NA
都是
NA
,不是真是假。检查它的标准方法是
is.na(muni)
。您可以创建一个键来匹配它们,然后合并向量。对于data.table,它将类似于:“setDT(subdel)[subdel==57,id:=1]”和“setDT(muni)[is.na(muni),id:=1]”以及“merge(subdel,muni,all.x=T,all.y=T,by=c(“id”)”
subset(y, is.na(muni) & subdel == 57 | !is.na(muni))