簡體   English   中英

當轉換為data.matrix的數字data.frame時,R對csv做什么?

[英]what is R doing to a csv when converting to numeric data.frame of data.matrix?

我有一個CSV文件。 它位於scikit.learn庫中。 在用python構建任何預測模型之前,我想看一下每個屬性與key屬性的相關性。 因此,我導入了CSV文件,如下所示:

 y <-read.csv("boston_house_prices.csv")

現在,我似乎無法執行任何描述性統計信息,也無法運行cor(y [,1:13],y [,14])。 它說“ x”不是數字。 我努力了:

 y <- as.data.frame(sapply(y, as.numeric))

 y <- data.matrix(y)

現在,數據為數字,我可以運行相關性了。 但是,如果我想運行基本統計信息,那么一切都會從發生的“轉換”中傾斜。 有人可以告訴我如何在運行cor()的同時保留數據本機的數字類型嗎? 為什么R必須將雙精度/十進制值轉換為整數才能進行運算?

謝謝。

使用read.csv讀取數據時,可以通過使用skip = 1來避免此問題。 我從原始數據中抓取了幾行,看來還可以。

第一行是不必要的,它實際上將標題行向下推到第一行中,這反過來又在讀取時將列轉換為因子。 當使用as.numeric ,實際上是將所有因子值更改為其數值,這些數值與原始數值不同,並且可能不正確。 這就是您描述的“偏斜”。

txt <- '506,13,,,,,,,,,,,,
  "CRIM","ZN","INDUS","CHAS","NOX","RM","AGE","DIS","RAD","TAX","PTRATIO","B","LSTAT","MEDV"
  0.00632,18,2.31,0,0.538,6.575,65.2,4.09,1,296,15.3,396.9,4.98,24
  0.02731,0,7.07,0,0.469,6.421,78.9,4.9671,2,242,17.8,396.9,9.14,21.6
  0.02729,0,7.07,0,0.469,7.185,61.1,4.9671,2,242,17.8,392.83,4.03,34.7
  0.03237,0,2.18,0,0.458,6.998,45.8,6.0622,3,222,18.7,394.63,2.94,33.4'

您當前的通話會產生以下因素:

sapply(read.csv(text = txt), class)
#     X506      X13        X      X.1      X.2      X.3      X.4 
# "factor" "factor" "factor" "factor" "factor" "factor" "factor" 
#      X.5      X.6      X.7      X.8      X.9     X.10     X.11 
# "factor" "factor" "factor" "factor" "factor" "factor" "factor" 

skip = 1似乎可以解決問題,因為它會產生數字列:

sapply(read.csv(text = txt, skip = 1), class)
#      CRIM        ZN     INDUS      CHAS       NOX        RM       AGE 
# "numeric" "integer" "numeric" "integer" "numeric" "numeric" "numeric" 
#       DIS       RAD       TAX   PTRATIO         B     LSTAT      MEDV 
# "numeric" "integer" "integer" "numeric" "numeric" "numeric" "numeric" 

因此,如果您將第一行更改為

y <- read.csv("boston_house_prices.csv", skip = 1)

此后一切都應該沒事了,不需要其他轉換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM