2016-03-05 59 views
2

我想在R中创建一个逻辑矢量,它将指示完整矢量的每个值,如果它是数字或不是。r编程 - 检查矢量中的每个值(如果它是数字的)

我想使用的功能is.numeric但如果所有的载体是数字或不喜欢,它只会检查:

vec<-c(1,2,3,"lol") 
t<-is.numeric(c[]) 
t 

会产生FALSE

我看着here,但它仅会告诉如何检查整个向量,并得到一个单一的值

我看了here,但问题不是有限的vs无限的

我想采取一个数据集,其中一些值是数字和其他是一个字符串,暗示没有价值,并只在数值中找到最小值。为此,我尝试创建一个逻辑向量,如果它是数字或非数字,它将对矢量的每个条目说。这对我创建该向量很重要,如果可能的话,我试图避免完成一个循环并构建该向量。

+4

试试'!is.na(as.numeric(vec))'索引 –

+2

'vector'只能是单一类型。当你尝试将不同类型的矢量(如你所做的)放在一起时,结果矢量将是“最昂贵”的类型(在你的例子中是'字符')。然而,你可以使用'list',它的每个组件可以是任何类型的。 – nicola

+0

@PierreLafortune谢谢你!我工作得很好 – thebeancounter

回答

4

我们可以使用数字强制来达到我们的优势。 R会通知我们确定我们的意思是将字符串更改为NA。在这种情况下,它正是我们正在寻找的:

!is.na(as.numeric(vec)) 
#[1] TRUE TRUE TRUE FALSE 
#Warning message: 
#NAs introduced by coercion 
4

我们可以使用grepl来获取逻辑向量。我们匹配的仅包含从开始(^)到结束($)的数字。我还包括可能存在负数和浮点数的可能性。

grepl('^-?[0-9.]+$', vec) 
#[1] TRUE TRUE TRUE FALSE 

注意:不会有警告消息。