我想將一列數字轉換爲數字,但某些單元格會顯示「New」和「Gone」,其中I想要保留爲字符。使用「as.numeric」時,防止R將非數字字符串強制爲「NA」
如果我使用as.numeric(df$col1)
,數字被轉換爲數字,但是這些詞被強制爲「NA」值。
有沒有什麼辦法可以將所有數字轉換爲數字,同時防止這種強制?
我想將一列數字轉換爲數字,但某些單元格會顯示「New」和「Gone」,其中I想要保留爲字符。使用「as.numeric」時,防止R將非數字字符串強制爲「NA」
如果我使用as.numeric(df$col1)
,數字被轉換爲數字,但是這些詞被強制爲「NA」值。
有沒有什麼辦法可以將所有數字轉換爲數字,同時防止這種強制?
你不能用矢量做它,因爲矢量只能包含一個類型。不過,你可以用列表來完成。
Data <- data.frame(col1=c("1","2","New","3","Gone"), stringsAsFactors=FALSE)
List <- lapply(as.list(Data$col1), type.convert, as.is=TRUE)
data.frame的列將始終是全部相同的類型。所以你不能在同一列中輸入字符串「New」和數字5。
然而,一個例子,讓你對你的方式:
x <- c('New', 1, 'Gone', 2)
ifelse(is.na(as.numeric(x)), x, as.numeric(x))
取決於你在做什麼這可以擴展到適用於您的具體情況。
每約書亞的評論,你可以在ifelse
語句中使用的功能:
ifelse(is.na(as.numeric(x)), sprintf('its a string %s', x), sprintf('its a number %f', as.numeric(x)))
然而,對於處理這種情況通常的技術是約書亞他的回答概括。
我不明白...你的'ifelse'結果和'x'是一樣的。我錯過了什麼? –
你是正確的先生!我試圖說明一種將數字從混合向量中取出而不放入NA的潛在方法。而不是使用'as.numeric(x)',需要一個適當的函數來執行OP所需的任何處理。鑑於一個更完整的問題,我很樂意給出更好的答案。但這樣,它將有趣的探索部分留給OP。 – Justin
+1 for'type.convert'我希望我早點知道這個函數。 – GSee
謝謝約書亞! – uhohrondo