R:根据特定模式后的不同值删除行

时间:2014-08-06 23:07:47

标签: r dataframe

我有以下数据集,我想删除包含值NA的所有行; NA; NA;我怎么能这样做?

NAME;   ID;     REFERENCE_YEAR; VALUE
NA;     NA;     NA;             0
ABANO;  767;    1859;           0
ABANO;  767;    1860;           -380
ABANO;  767;    1910;           47
NA;     NA;     NA;             0
ADAMS;  885;    1987;           0
ADAMS;  885;    1988;           -2
ADAMS;  2923;   1997;           NA
ADAMS;  2923;   1999;           NA
ADAMS;  2923;   2000;           NA
ADAMS;  2923;   2002;           NA
ADAMS;  2923;   2007;           NA
ADAMS;  2923;   2008;          -17
NA;     NA;     NA;             0
AEU.PIRCHLKAR;  504;    1981;   0
NA;     NA;     NA;             0
NA;     NA;     NA;             0

3 个答案:

答案 0 :(得分:0)

如果您只有四列,则调用每列并使其不合逻辑 这是一项艰巨的任务。

index = is.na(data$name) & is.na(data$ID) & is.na(data$REFERENCE_YEAR) & 
(data$VALUE == 0)

data = data[-index, ]

如果您有更多列,则可以使用" apply"使用自定义功能。

答案 1 :(得分:0)

假设使用sep =""

读取数据
df[!apply(df,1,paste,collapse="")=="NA;NA;NA;0;",]

答案 2 :(得分:0)

你可以尝试:

  df[!(rowSums(is.na(df[,1:3]))==3 &!df[,4]),]
  #             NAME   ID REFERENCE_YEAR VALUE
  # 2          ABANO  767           1859     0
  # 3          ABANO  767           1860  -380
  # 4          ABANO  767           1910    47
  # 6          ADAMS  885           1987     0
  # 7          ADAMS  885           1988    -2
  # 8          ADAMS 2923           1997    NA
  # 9          ADAMS 2923           1999    NA
  # 10         ADAMS 2923           2000    NA
  # 11         ADAMS 2923           2002    NA
  # 12         ADAMS 2923           2007    NA
  # 13         ADAMS 2923           2008   -17
  # 15 AEU.PIRCHLKAR  504           1981     0