R 如果所有列都包含NA';但保留至少包含一个结果的行

R 如果所有列都包含NA';但保留至少包含一个结果的行,r,dplyr,R,Dplyr,我有一些数据,我正试图从中删除NA值 我适用以下规定: data %>% head(20) %>% drop_na(contains("gvkey")) 这将删除所有行。我想保留第12行和第16行,因为这两行在gvkey[X]列之一中有值。如果gvkey2中有一个值,我也希望保留这些行。这同样适用于gvkey[1]…[5] 数据: 数据尝试: 输出: cod cod_fix pdpass sta

我有一些数据,我正试图从中删除NA值

我适用以下规定:

data %>% 
  head(20) %>% 
  drop_na(contains("gvkey"))
这将删除所有行。我想保留第12行和第16行,因为这两行在
gvkey[X]
列之一中有值。如果
gvkey2
中有一个值,我也希望保留这些行。这同样适用于
gvkey[1]…[5]

数据:

数据尝试:

输出:

                                 cod cod_fix   pdpass    standard_name uspto_assignee pdpco1 source begyr1 gvkey1
1 03 Foreign corp, incl. state-owned       0 12298245 02 MICRO INT LTD         782400 138961  m2006   2000 138961
2 03 Foreign corp, incl. state-owned       0 12298245  02MICRO INT LTD         782400 138961  m2006   2000 138961
  endyr1 pdpco2 begyr2 gvkey2 endyr2 pdpco3 begyr3 gvkey3 endyr3 pdpco4 begyr4 gvkey4 endyr4 pdpco5 begyr5 gvkey5
1   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
2   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
  endyr5
1     NA
2     NA

使用
base R
,我们可以使用
Reduce
lappy

data[!Reduce(`&`, lapply(data[startsWith(names(data), 'gvkey')], is.na)),]
#                                  cod cod_fix   pdpass    standard_name uspto_assignee pdpco1 source
#12 03 Foreign corp, incl. state-owned       0 12298245 02 MICRO INT LTD         782400 138961  m2006
#16 03 Foreign corp, incl. state-owned       0 12298245  02MICRO INT LTD         782400 138961  m2006
#   begyr1 gvkey1 endyr1 pdpco2 begyr2 gvkey2 endyr2 pdpco3 begyr3 gvkey3 endyr3 pdpco4 begyr4 gvkey4
#12   2000 138961   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
#16   2000 138961   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
#   endyr4 pdpco5 begyr5 gvkey5 endyr5
#12     NA     NA     NA     NA     NA
#16     NA     NA     NA     NA     NA
                                 cod cod_fix   pdpass    standard_name uspto_assignee pdpco1 source begyr1 gvkey1
1 03 Foreign corp, incl. state-owned       0 12298245 02 MICRO INT LTD         782400 138961  m2006   2000 138961
2 03 Foreign corp, incl. state-owned       0 12298245  02MICRO INT LTD         782400 138961  m2006   2000 138961
  endyr1 pdpco2 begyr2 gvkey2 endyr2 pdpco3 begyr3 gvkey3 endyr3 pdpco4 begyr4 gvkey4 endyr4 pdpco5 begyr5 gvkey5
1   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
2   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
  endyr5
1     NA
2     NA
data[!Reduce(`&`, lapply(data[startsWith(names(data), 'gvkey')], is.na)),]
#                                  cod cod_fix   pdpass    standard_name uspto_assignee pdpco1 source
#12 03 Foreign corp, incl. state-owned       0 12298245 02 MICRO INT LTD         782400 138961  m2006
#16 03 Foreign corp, incl. state-owned       0 12298245  02MICRO INT LTD         782400 138961  m2006
#   begyr1 gvkey1 endyr1 pdpco2 begyr2 gvkey2 endyr2 pdpco3 begyr3 gvkey3 endyr3 pdpco4 begyr4 gvkey4
#12   2000 138961   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
#16   2000 138961   2006     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
#   endyr4 pdpco5 begyr5 gvkey5 endyr5
#12     NA     NA     NA     NA     NA
#16     NA     NA     NA     NA     NA