5

Excelファイルをインポートして、このようなデータフレームを取得しました

structure(list(A = structure(1:3, .Label = c("1.100", "2.300", 
"5.400"), class = "factor"), B = structure(c(3L, 2L, 1L), .Label = c("1.000.000", 
"500", "7.800"), class = "factor"), C = structure(1:3, .Label = c("200", 
"3.100", "4.500"), class = "factor")), .Names = c("A", "B", "C"
), row.names = c(NA, -3L), class = "data.frame")

charsこれらをnumericまたはに変換したいと思いintegerます。ただし、ドット文字 ( .) は小数点記号ではなく、「千の区切り記号」です (ドイツ語です)。

データフレームを適切に変換するにはどうすればよいですか?

私はこれを試しました:

df2 <- as.data.frame(apply(df1, 2, gsub, pattern = "([0-9])\\.([0-9])", replacement= "\\1\\2"))

df3 <- as.data.frame(data.matrix(df2))

ただし、apply各列を因子のリストに変換するようです。そうするのを防ぐことはできますapplyか?

4

2 に答える 2

9

これを使用できます:

sapply(df, function(v) {as.numeric(gsub("\\.","", as.character(v)))})

与える:

        A       B    C
[1,] 1100    7800  200
[2,] 2300     500 3100
[3,] 5400 1000000 4500

これでmatrix オブジェクトが得られますが、必要に応じてラップすることもできdata.frame()ます。

元のデータの列は文字ではなく因子であることに注意してください。


編集:または、でラップする代わりに、data.frame()これを実行して結果を直接取得できますdata.frame:

# the as.character(.) is just in case it's loaded as a factor
df[] <- lapply(df, function(x) as.numeric(gsub("\\.", "", as.character(x))))
于 2013-04-05T12:13:40.507 に答える
2

別の解決策を見つけたと思います:

を使用する必要がありますstringsAsFactors = FALSE

このような:

df2 <- as.data.frame(apply(df1, 2, gsub, pattern = "([0-9])\\.([0-9])", replacement= "\\1\\2"), stringsAsFactors = FALSE)

df3 <- as.data.frame(data.matrix(df2))
于 2013-04-05T12:14:47.723 に答える