簡體   English   中英

如何處理 x 必須是相關圖中的數字錯誤?

[英]how does one deal with x must be numeric error in correlation plot?

我試圖為我的數據生成一個相關圖,但我得到“x 必須是數字錯誤”,其他修復對我的情況不起作用。 我是否也必須將月份更改為數字? 或者有沒有辦法只為我的情節選擇數字列

嘗試將全部轉換為數字,但它只是自動變回因子

getwd()
myDF <- read.csv("qbase.csv")
head(myDF)
str(myDF)

cp <-cor(myDF)
head(round(cp,2))

'data.frame':   12 obs. of  8 variables:
 $ Month                    : Factor w/ 12 levels "18-Apr","18-Aug",..: 5 4 8 1 9 7 6 2 12 11 ...
 $ Monthly.Recurring.Revenue: Factor w/ 2 levels "$25,000 ","$40,000 ": 1 1 1 1 1 2 2 2 2 2 ...
 $ Price.per.Seat           : Factor w/ 2 levels "$40 ","$50 ": 2 2 2 2 2 1 1 1 1 1 ...
 $ Paid.Seats               : int  500 500 500 500 500 1000 1000 1000 1000 1000 ...
 $ Active.Users             : int  10 50 50 100 450 550 800 900 950 800 ...
 $ Support.Cases            : int  0 0 1 5 35 155 100 75 50 45 ...
 $ Users.Trained            : int  1 5 0 50 100 300 50 30 0 100 ...
 $ Features.Used            : int  5 5 5 5 8 9 9 10 15 15 ...

dput(myDF)的結果如下:

dput( myDF)

structure(list(Month = structure(c(5L, 4L, 8L, 1L, 9L, 7L, 6L, 
2L, 12L, 11L, 10L, 3L), .Label = c("18-Apr", "18-Aug", "18-Dec", 
"18-Feb", "18-Jan", "18-Jul", "18-Jun", "18-Mar", "18-May", "18-Nov", 
"18-Oct", "18-Sep"), class = "factor"), Monthly.Recurring.Revenue = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("$25,000 ", 
"$40,000 "), class = "factor"), Price.per.Seat = structure(c(2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("$40 ", 
"$50 "), class = "factor"), Paid.Seats = c(500L, 500L, 500L, 
500L, 500L, 1000L, 1000L, 1000L, 1000L, 1000L, 1000L, 1000L), 
    Active.Users = c(10L, 50L, 50L, 100L, 450L, 550L, 800L, 900L, 
    950L, 800L, 700L, 600L), Support.Cases = c(0L, 0L, 1L, 5L, 
    35L, 155L, 100L, 75L, 50L, 45L, 10L, 5L), Users.Trained = c(1L, 
    5L, 0L, 50L, 100L, 300L, 50L, 30L, 0L, 100L, 50L, 0L), Features.Used = c(5L, 
    5L, 5L, 5L, 8L, 9L, 9L, 10L, 15L, 15L, 15L, 15L)), class = "data.frame", row.names = c(NA, 
-12L))

您可以將日期轉換為POSIXct並刪除美元符號以將第二列和第三列轉換為數字:

myDF$Month <- as.numeric(as.POSIXct(myDF$Month, format="%d-%b", tz="GMT"))
myDF[,c(2,3)] <-  sapply(myDF[,c(2,3)], function(x) as.numeric(gsub("[\\$,]", "", x)))

cp <-cor(myDF)

library(ggcorrplot)
ggcorrplot(cp)

您正在嘗試獲得因子和數字列之間的相關性,這是不可能發生的( cor僅處理數字,因此會出現錯誤)。 你可以做:

library(data.table)

ir <- data.table(iris) # since you didn't produce a reproducible example

ir[, cor(.SD), .SDcols = names(ir)[(lapply(ir, class) == "numeric")]]

里面有什么:

cor(.SD)將計算由子集 data.table ( .SD ,參見?data.table )組成的新數據幀的相關矩陣。

.SDcols建立.SDcols列將進入該子集 data.table。 它們只是那些類是numeric

您可以刪除美元符號並使用 sapply 將整數變量更改為數字,然后計算相關性。

myDF[,c(2,3)] <-  sapply(myDF[,c(2,3)], function(x) as.numeric(gsub("[\\$,]", "", x)))
newdf <-  sapply(myDF[,2:8],as.numeric)
cor(newdf)

編輯:

如果要使用月份變量。 請安裝lubridate並使用月份功能。

例如:

library(lubridate)
myDF$Month<- month(as.POSIXct(myDF$Month, format="%d-%b", tz="GMT"))
myDF[,c(2,3)] <-  sapply(myDF[,c(2,3)], function(x) as.numeric(gsub("[\\$,]", "", x)))
newdf <-  sapply(myDF,as.numeric)
cor(as.data.frame(newdf))

將這些月份轉換為 Date 類的方法:

myDF$MonDt <- as.Date( paste0(myDF$Month, "-15"), format="%y-%b-%d")

也可以使用zoo::as.yearmon 這兩種方法都允許您應用as.numeric以獲得有效的時間縮放值。 其他答案在使用單年數據時就足夠了,但是因為他們錯誤地假設前兩位數字是月份的第幾天而不是年份,他們將無法在任何多年數據集中提供有效的答案,但會不要對此發出任何警告。

with(myDF, cor(Active.Users, as.numeric(MonDt) )  )
[1] 0.8269705

正如其他答案之一所示,在 as.numeric 成功處理貨幣格式文本之前,需要刪除 $ 和逗號。 同樣,這也是因子數據,因此as.numeric可能會產生錯誤的答案,盡管在這個簡單的示例中不會。 一個安全的方法是:

myDF[2:3] <- lapply(myDF[2:3], function(x) as.numeric( gsub("[$,]", "", x)))

myDF
    Month Monthly.Recurring.Revenue Price.per.Seat Paid.Seats Active.Users
1  18-Jan                     25000             50        500           10
2  18-Feb                     25000             50        500           50
3  18-Mar                     25000             50        500           50
4  18-Apr                     25000             50        500          100
5  18-May                     25000             50        500          450
6  18-Jun                     40000             40       1000          550
7  18-Jul                     40000             40       1000          800
8  18-Aug                     40000             40       1000          900
9  18-Sep                     40000             40       1000          950
10 18-Oct                     40000             40       1000          800
11 18-Nov                     40000             40       1000          700
12 18-Dec                     40000             40       1000          600
   Support.Cases Users.Trained Features.Used      MonDt
1              0             1             5 2018-01-15
2              0             5             5 2018-02-15
3              1             0             5 2018-03-15
4              5            50             5 2018-04-15
5             35           100             8 2018-05-15
6            155           300             9 2018-06-15
7            100            50             9 2018-07-15
8             75            30            10 2018-08-15
9             50             0            15 2018-09-15
10            45           100            15 2018-10-15
11            10            50            15 2018-11-15
12             5             0            15 2018-12-15

這個問題得到了一個答案,它允許計算多個相關系數,並在一頁上繪制兩種數據關聯:

如何為在格子中使用 splom 繪制的相關系數添加 p 值?

暫無
暫無

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

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