在R中:从数据框中删除不包含整数(例如字符等)的行

时间:2016-10-05 10:13:17

标签: r row

我的数据框df如下所示:

Variable A Variable B Variable C
9          2          1
2          0          don't know
maybe      1          1
?          0          3

我需要删除所有使用非数值的行。之后看起来应该是这样的:

Variable A Variable B Variable C
9          2          1

我想过像

这样的东西
df[! grepl(*!= numerical*, df),]

df[! df %in% *!= numerical*, ]

但是我找不到任何我可以用作&#34的输入的东西;取出所有不匹配数值的东西"。请你帮助我好吗? 非常感谢!

2 个答案:

答案 0 :(得分:4)

一种选择是遍历列,转换为numeric以便所有非数字元素都转换为NA,检查带有is.na的NA,否定(!)它,将list的相应元素与Reduce&进行比较,使用它来对行进行子集化。

df[Reduce(`&`, lapply(df, function(x) !is.na(as.numeric(x)))),]

答案 1 :(得分:0)

这可能不是最好的方法,但有效。

s是包含数据的df-

contains <-  lapply(seq_len(nrow(s)), function(i){
    yes <-  grep("[^0-9.]" , s[i,]) #regex for presence of non-digits 
    ifelse(identical(yes, integer(0)),F,T)
}) %>% unlist


 s <- s[which(!contains),]

谢谢!