保留字母数字,但删除R中只有数字的行

时间:2017-12-01 16:49:39

标签: r

如何删除仅包含数字的行。 我有:

col A     colB      colc
1947       2            3
1947       USA1        USA
1947       Canada     Canada
1947       NA         Mexico

我想要的是:

col A     colB      colc

1947       USA1        USA
1947       Canada     Canada
1947       NA         Mexico

请注意数字存在于其他行中,但我希望删除仅包含数字的行(基于colBcolc) 我在c(“USA1”,“canada”,“墨西哥”)中尝试了grep,但这删除了我想保留的NA值。

1 个答案:

答案 0 :(得分:1)

我们可以遍历列,使用grepl查找数字元素,然后Reduce将其设置为逻辑vector以对行进行子集

df1[!Reduce(`|`, lapply(df1[-1], grepl, pattern = '^[0-9]+$')),]
#   colA   colB   colc
#2 1947   USA1    USA
#3 1947 Canada Canada
#4 1947   <NA> Mexico

另一种选择是转换为numeric,然后与is.na核对,因为所有非数字元素都会转换为NA并带有警告消息

df1[Reduce(`&`, lapply(df1[-1], function(x) is.na(as.numeric(x)))),]