删除由字符串组成的行

时间:2016-08-31 10:50:02

标签: regex r

我的列只应包含数字,但也有字符或其他符号。 R将功能Housenumber视为角色。

例如:

Housenumber 
1
14
5
at5
53.!
boat

我想知道我可以编写哪种函数来识别不包含数字的行并删除它们?

Housenumber 
1
14
5

4 个答案:

答案 0 :(得分:4)

df[length(grep("[^[:digit:]]", df$Housenumber, value=F)) == 0, ]

<强>解释

正则表达式[^[:digit:]]将匹配任何数字字符,例如你要剥离的其他字符和符号。

电话

grep("[^[:digit:]]", df$Housenumber, value=F)
如果找到匹配项,

将返回包含Housenumber列的第一个索引的向量。因此,如果找不到匹配项,则此向量的长度将为零,这意味着您要保留该行。

在这种特殊情况下,我更喜欢@akrun给出的答案,但我的答案也适用于使用任何类型的正则表达式过滤行的一般情况。

答案 1 :(得分:1)

这可以通过as.numeric来完成,!is.na会将非数字元素转换为NA,我们会删除那些提供逻辑索引的df1[!is.na(as.numeric(df1$Housenumber)),, drop= FALSE] 行。

{{1}}

答案 2 :(得分:0)

您可以尝试通过as.numeric将值转换为数字。非数字值将强制转换为NA,因此您可以在第二步中过滤掉NA - 值。

Housenumber <- c(1,14,5,"at5","53.!","boat") # Create your housenumber vector

Housenumber <- as.numeric(Housenumber) # Convert it to numeric

Housenumber <- Housenumber[!is.na(Housenumber)] # Filter out the NA

这应该可以解决问题。

答案 3 :(得分:0)

如果您的代码需要多次,请编写此函数:

numerics_of = function (x){
nums = c()
a = suppressWarnings(as.numeric(x));
return (a[!is.na(a)])
}

和exmaple:

x = c(2,4,5,3,2,"a",2,3,4)
numerics_of(x)

将提供此输出

[1] 2 4 5 3 2 2 3 4