2 votes

In eval(substitute(list(...)), `_data`, parent.frame()) : NAs introduits par coercion

Je souhaite trouver la valeur de la corrélation de rang de Spearman entre ces variables.

V1  V2  V3  V4
A   SUV Yes Good
A   SUV No  Good
B   SUV No  Good
B   SUV Yes Satisfactory
C   car Yes Excellent
C   SUV No  Poor
D   SUV Yes Poor
D   van Yes Satisfactory
E   car No  Excellent

corr <- cor.test(x=df$V2, y=df$V3, method = "spearman")
corr

En passant le code, j'ai reçu l'erreur suivante (Erreur 1)

Error in cor.test.default(x = df$V2, y = df$V3, method = "spearman") : 
  'x' must be a numeric vector

Ce que j'ai essayé ?

D'après cette discussion sur stack overflow : Comment convertir une colonne d'un cadre de données en un type numérique ?

transform(df, V2 = as.numeric(V2))

Cependant, en passant le code ci-dessus, je reçois l'erreur suivante (erreur 2) et le message d'erreur 1 continue d'apparaître même après la transformation.

Warning message:
In eval(substitute(list(...)), `_data`, parent.frame()) :
  NAs introduced by coercion

2voto

akrun Points 148302

Selon le ?cor.test ,

x, y - tableaux numériques de valeurs de données. x et y doivent avoir la même longueur.

Une option consiste à convertir en factor et contraindre à integer

cor.test(x=as.integer(factor(df$V2)), y=as.integer(factor(df$V3)), method = "spearman")

    Spearman's rank correlation rho

data:  as.integer(factor(df$V2)) and as.integer(factor(df$V3))
S = 95.158, p-value = 0.593
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.2070197 

Le code donne un avertissement et renvoie NA parce qu'il essaie de convertir un character directement à la colonne de la classe numeric . Il s'agirait plutôt de factor -> numeric/integer

transform(df, V2 = as.numeric(factor(V2)))

données

df <- structure(list(V1 = c("A", "A", "B", "B", "C", "C", "D", "D", 
"E"), V2 = c("SUV", "SUV", "SUV", "SUV", "car", "SUV", "SUV", 
"van", "car"), V3 = c("Yes", "No", "No", "Yes", "Yes", "No", 
"Yes", "Yes", "No"), V4 = c("Good", "Good", "Good", "Satisfactory", 
"Excellent", "Poor", "Poor", "Satisfactory", "Excellent")), 
class = "data.frame", row.names = c(NA, 
-9L))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X