如何检查变量的值是否包含数字与值是R中的数字

时间:2018-04-26 16:35:05

标签: r contains

我有以下R数据框。专栏"州"是一个因子列。 我有两个问题:

1-我想创建一个标志,以确定每一行(状态值)是否为数字或 字符。 1如果是字符,0如果是数字

ID   state
 1   123fg^>
 2   fhgfh@
 3   125@!
 4   125

我希望输出看起来像这样

ID   state   Flag
 1   123fg^>    1
 2   fhgfh@     1
 3   125@!      1
 4   125        0

2-接下来,如果单元格包含数字,我想创建1或0的标志。所以对于同一个例子,我希望得到以下输出

ID   state   Flag
 1   123fg^>    1
 2   fhgfh@     0
 3   125@!      1
 4   125        1

3 个答案:

答案 0 :(得分:5)

对于这两种情况,我们可以使用grep来匹配从开头([0-9]+)到结尾(^

的一个或多个数字($
as.integer(!grepl("^[0-9]+$", df$state))
#[1] 1 1 0

或从开始到结束的一个或多个字母([A-Za-z]+),做一个否定(!)并将逻辑向量转换为二进制

as.integer(!grepl("^[A-Za-z]+$", df$state))
#[1] 1 0 1

答案 1 :(得分:2)

一种稍微强大的数字检测方法(基于akrun的答案)

as.integer(grepl("[0-9]",df$state))
#> [1] 1 0 1

由于您要求包含数字的字符串,这是一个更简单的解决方案,并且还处理纯标点符号的情况。

as.integer(grepl("[0-9]","!?"))
#> [1] 0
as.integer(!grepl("^[A-Za-z]+$", "?!"))
#> [1] 1

答案 2 :(得分:1)

使用gsub的选项可以是:

as.numeric(gsub("[0-9]|\\.","",df$state) != "")
[1] 1 1 1 0

|\\. =>这将允许检测具有分数(即125.8)

的偶数