Je travaille sur des données simples comme ci-dessous:

teacher student
  12      409
  43      403
  12      415
  12      409
  67      311
  19      201

J'essaie de récupérer les entrées où enseignant = 12 et étudiant = 409 . J'utilise la commande suivante:

library(sqldf)
sqldf('SELECT * 
      FROM df
      WHERE teacher == 12 and student == 409')

Je sais que c'est une commande de base, mais quand je l'exécute, je reçois le message d'erreur suivant:

Error in asfn(rs[[i]]) : need explicit units for numeric conversion

Je reçois la même erreur, même quand je cours:

# Without the and condition
sqldf('SELECT * 
      FROM df
      WHERE teacher == 12')

Ou quand je cours ça

# Single equal sign
sqldf('SELECT * 
      FROM df
      WHERE teacher = 12')

Veuillez noter que dans mon ensemble de données actuel df$teacher et df$student sont des entiers. Je veux comprendre pourquoi je reçois cette erreur. Tout avis serait grandement apprécié.

Ma sortie souhaitée est:

teacher   student
  12        409
  12        409

Merci!

1
Sandy 3 juin 2021 à 03:34

1 réponse

Meilleure réponse

Nous avons juste besoin de célibataire =

library(sqldf)
sqldf('SELECT * 
      FROM df
      WHERE teacher = 12 and student = 409')

-production

 teacher student
1      12     409
2      12     409

Avec les données d'origine de l'OP, cela n'a pas corrigé, nous pouvons donc utiliser l'argument method

sqldf('SELECT * 
      FROM df
      WHERE teacher = 12 and student = 409', method = 'name__class')

Selon le ?sqldf, le "name__class" est utilisé avec Date classe comme exemple. Comme les données originales de l'OP ne sont pas partagées, ce n'est toujours pas sûr pourquoi il a fonctionné

Méthode = "Nom__Class", ce qui signifie que les noms de colonnes qui se terminent par __class avec deux souligneurs où la classe est une classe R (telle que la date) est convertie en classe et la partie __class est retirée du nom de la colonne. "

Les données

df <- structure(list(teacher = c(12L, 43L, 12L, 12L, 67L, 19L), student = c(409L, 
403L, 415L, 409L, 311L, 201L)), class = "data.frame", row.names = c(NA, 
-6L))
1
akrun 3 juin 2021 à 00:59