我的列只应包含数字,但也有字符或其他符号。 R将功能Housenumber视为角色。
例如:
Housenumber
1
14
5
at5
53.!
boat
我想知道我可以编写哪种函数来识别不包含数字的行并删除它们?
Housenumber
1
14
5
答案 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