数値の列を数値に変換したいのですが、「新規」および「終了」と表示されている特定のセルがあり、それらを文字として保持したいと思います。
を使用するas.numeric(df$col1)
と、数値は数値に変換されますが、単語は「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))
何をしているかに応じて、これを拡張して特定のケースに適用することができます。
Joshuaのコメントによると、ifelse
ステートメントで関数を使用できます。
ifelse(is.na(as.numeric(x)), sprintf('its a string %s', x), sprintf('its a number %f', as.numeric(x)))
ただし、この状況に対処するための通常の手法は、ジョシュアが回答で概説したとおりです。