以下のデータ セットの例のように、数字のゼロの代わりにハイフンが使用されているデータ セットがありmy.data
ます。ハイフンをゼロに置き換えることはできますが、影響を受ける列を数値に変換する際に問題が発生します。私の実際のデータ セットは非常に大きく、多くの列があり、どの列にハイフンが含まれるかわかりません。また、データ セットが大きすぎて複雑すぎて、R に読み込む前に、データ セット自体の中で検索と置換を快適に使用することができません。
実際のデータ セットの最初の 3 列は文字列で、残りの列は数値列である必要があると思います (ハイフンがない場合)。ハイフンを含むすべての列を数値に変換する効率的で一般的な方法はありますか?
以下に1つの方法を示しますが、かなり面倒です。
私はここで多くの同様の投稿を見つけましたが、それらは一般的に、欠落している観測を別のものに置き換える方法、または特定の既知の因子列を文字または数値形式に変換する方法を尋ねているようです. 見落としていた可能性はありますが、変換が必要な特定の列が不明なこの特定の問題に対処する投稿は見つかりませんでした。アドバイスありがとうございます。
my.data <- read.table(text = "
landuse units grade Clay Lincoln Basin McCartney Maple
apple acres AAA 1 - 3 4 6
apple acres AA 1000 900 NA NA 700
pear acres AA 10.0 20 NA 30.0 -
peach acres AAA 500 NA 350 300 200
", sep = "", header = TRUE, stringsAsFactors = FALSE, na.string=c('NA'))
my.data
str(my.data)
my.data[my.data == '-'] = '0'
as.numeric(my.data[,4:dim(my.data)[2]])
# Error: (list) object cannot be coerced to type 'double'
# The two lines below work but are too specific
# my.data$Lincoln <- as.numeric(my.data$Lincoln)
# my.data$Maple <- as.numeric(my.data$Maple)
str(my.data)
# Here I unlist the columns I want to be numeric,
# convert them to a numeric matrix and then create a data frame.
# But this seems cumbersome.
un.my.data <- unlist(my.data[,4: dim(my.data)[2]])
un.my.data <- as.numeric(un.my.data)
my.data.2 <- matrix(un.my.data, nrow=dim(my.data)[1], byrow=F)
colnames(my.data.2) <- names(my.data)[4:dim(my.data)[2]]
new.data <- data.frame(my.data[,1:3], my.data.2)
new.data
str(new.data)