在计算数据帧的相关矩阵时,所有列都必须为数字,如果不是这种情况,则会在cor(“ data_frame_name”)中得到错误Error:'x'必须为数字。为了解决这个问题,我们可以一一找到变量之间的相关性,或者使用apply函数。
请看以下数据帧-
set.seed(99) x1<-rnorm(20) x2<-rpois(20,5) x3<-rpois(20,2) x4<-LETTERS[1:20] x5<-runif(20,2,10) x6<-sample(letters[1:3],20,replace=TRUE) df<-data.frame(x1,x2,x3,x4,x5,x6) df
输出结果
x1 x2 x3 x4 x5 x6 1 0.2139625022 7 4 A 6.423159 a 2 0.4796581346 5 1 B 7.176488 a 3 0.0878287050 7 2 C 2.372402 c 4 0.4438585075 8 3 D 6.599771 a 5 -0.3628379205 5 2 E 5.122577 c 6 0.1226740295 8 3 F 3.133224 c 7 -0.8638451881 4 2 G 2.482256 a 8 0.4896242667 4 4 H 4.532982 c 9 -0.3641169125 5 0 I 2.670717 c 10 -1.2942420067 2 3 J 8.597253 a 11 -0.7457690454 6 0 K 2.699053 a 12 0.9215503620 7 2 L 8.743498 b 13 0.7500543504 6 2 M 3.427915 c 14 -2.5085540159 10 2 N 5.928563 a 15 -3.0409340953 4 2 O 3.544168 a 16 0.0002658005 7 0 P 3.710395 c 17 -0.3940189942 2 2 Q 9.609634 c 18 -1.7450276608 5 0 R 5.886087 b 19 0.4986314508 8 2 S 5.507034 c 20 0.2709537888 4 3 T 2.137873 b
在df中找到列的相关矩阵-
cor(df) Error in cor(df) : 'x' must be numeric
在这里,错误意味着所有列都不是数字。
str(df) 'data.frame': 20 obs. of 6 variables: $ x1: num 0.214 0.4797 0.0878 0.4439 -0.3628 ... $ x2: int 7 5 7 8 5 8 4 4 5 2 ... $ x3: int 4 1 2 3 2 3 2 4 0 3 ... $ x4: Factor w/ 20 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ... $ x5: num 6.42 7.18 2.37 6.6 5.12 ... $ x6: Factor w/ 3 levels "a","b","c": 1 1 3 1 3 3 1 3 3 1 ...
现在要找到所有数字列的相关矩阵,我们可以执行以下操作:
cor(df[sapply(df,is.numeric)])
输出结果
x1 x2 x3 x5 x1 1.00000000 0.14685889 0.23107456 0.04232205 x2 0.14685889 1.00000000 -0.02664914 -0.14822679 x3 0.23107456 -0.02664914 1.00000000 0.18971761 x5 0.04232205 -0.14822679 0.18971761 1.00000000