R 如何处理相关图中x必须是数字的错误?

R 如何处理相关图中x必须是数字的错误?,r,correlation,R,Correlation,我试图为我的数据生成一个相关图,但我得到了“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: $ Mon

我试图为我的数据生成一个相关图,但我得到了“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 ...

您试图获得因子和数值列之间的相关性,但这是不可能的(
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")]]
库(data.table)

ir您可以将日期转换为
POSIXct
,也可以删除美元符号以将第二列和第三列转换为数字:


myDF$Month您可以删除美元符号,并使用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)

myDF[,c(2,3)]将这些月份转换为日期类的方法:

myDF$MonDt <- as.Date( paste0(myDF$Month, "-15"), format="%y-%b-%d")
正如其他答案之一所示,在As.numeric成功用于货币格式文本之前,需要删除$和逗号。同样,这也是因子数据,因此.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

myDF[2:3]很可能这是错误的。仅仅因为您消除了一个错误并不足以得到正确的代码。这是有效的。谢谢你知道哪种类型的回归最适合在同一数据框架内检查哪些变量在统计上彼此显著吗?如果你想使用月变量,你可以使用包lubridate。然后,myDF$Month@RodrigoDíazLupanow感谢您的编辑。当我尝试使用:library(corrplot)corrplot(myDF,method=“circle”)获取相关图时。我在矩阵中得到以下错误corrplot(myDF,method=“circle”)错误(if(is.null(value))logical()else值,nrow=nr,dimnames=list(rn,:“dimnames”[2]的长度不等于数组范围。是否尝试使用corrplot(如.dataframe(myDF))?您是否实际测试了as.POSIXct函数是否可以接受该格式。这肯定不是我最后一次尝试该格式。@42-我实际使用
“18 Apr”
@M-M感谢您的帮助,在运行前3行代码后,我仍然收到了“x必须是数字”错误。@MarcusAnum如果您共享
dput(head)的输出,那就好了(myDF))
对于您的问题,可以测试解决方案并更好地帮助您。@M-M您没有抛出错误,但我认为您犯了语义错误。一个名为“月”的专栏,vleu为“4月18日”更可能是2018年4月,而不是2019年4月18日。您有多个答案,其中一些答案声称删除了一个错误,因为他们的代码没有显示“错误”当运行时。但有多少实际更改值为有效月份?我怀疑没有一个。如果您在没有与日期类进行适当对话的情况下将因子值转换为数字,那么四月和八月都将低于一月。如果您发布
dput(myDF)的输出,可能会得到更好的答案
。您应该使用原始版本执行此操作。而不是在应用下面的代码之后执行此操作。@42-非常感谢您提供的提示,我对此一无所知,这就是为什么我发布的注释和代码有点不对劲的原因。我将重新发布
dput(myDF)
的输出。最后,我打算使用
corrplot生成一个相关图(myDF,method=“circle”)
并运行多元线性回归,查看哪些变量对活跃用户的影响最大。我们也非常欢迎您提供相关帮助。
myDF$MonDt <- as.Date( paste0(myDF$Month, "-15"), format="%y-%b-%d")
with(myDF, cor(Active.Users, as.numeric(MonDt) )  )
[1] 0.8269705
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