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