我的数据框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的输入的东西;取出所有不匹配数值的东西"。请你帮助我好吗? 非常感谢!
答案 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),]
谢谢!