2016-03-05 28 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 

注意:不會有警告消息。

相關問題