0
votes

R: fraction de caractère de classe à décimal - Autres approches ne fonctionnent pas

Désolé pour la duplicate, mais pour une raison quelconque, la réponse indiquée Ici ne fonctionne pas pour moi. J'ai vérifié et la table de données avec laquelle je travaille est de nature de caractère.

c'est ma table de données forte> p> xxx pré>

Comme vous le voyez, j'ai modélisé la deuxième colonne de manière à avoir des éléments exclusivement au format fraction. Je veux avoir la deuxième colonne en format décimal, la première colonne en tant que numérique plutôt que de caractère plutôt que de caractère et l'objectif final est de résumer les deux colonnes de la ligne de ligne. P>

alors que j'essaye de le transformer en décimal Cependant, il n'a aucun effet sur mon DT - le voir pour vous-même p> xxx pré>

l'autre approche forte> i utilisée, ne fonctionne pas non plus P>

> dt %>% mutate(V2 = eval(parse(text = V2)))
  V1   V2
1  4 0.75
2  1 0.75
3  0 0.75
4  3 0.75


3 commentaires

Le problème résulte de la manière dont vous avez défini fractiontodecimal () . Le x est redondant.


J'ai pensé que cela pourrait être le cas, alors j'ai aussi essayé sans, mais cela ne fonctionnait toujours pas .. Merci pour la pointe Tho, j'imprime toujours le résultat à la fin - va changer cela à partir de maintenant


Je veux dire simplement supprimer le x à la dernière ligne de fractiontodecimal () et sapply () fonctionnera. Ça marche pour moi.


3 Réponses :


1
votes

Utiliser sapply code>.

dt$V2 <- sapply(dt$V2, function(x) eval(parse(text=x)))
dt
#   V1   V2
# 1  4 0.00
# 2  1 0.00
# 3  0 0.50
# 4  3 0.75


2 commentaires

Merci, jay.sf - ça marche! Je ne comprends pas cependant, pourquoi l'appliquer cela fonctionne directement mais en utilisant une fonction ne fonctionne pas? N'était-ce pas censé être la même chose?


Je ne suis pas sûr à 100%, mais parse lit le vecteur "ligne par ligne", qui est probablement la raison pour laquelle il s'agit juste de la dernière ligne est eval ued. Semblable à non vectorisé, sapply .



1
votes

Votre fonction fonctionne, mais vous ne changez pas x dans la fonction et retourner un non modifié x .

de sorte de retour de eval + parse directement xxx

ou stocke le résultat dans x et renvoyer le changement x . xxx


1 commentaires

Wow, je ne peux pas y croire. Vous êtes 100% raison! J'ai perdu beaucoup de temps et je ne peux pas croire que c'était le problème lol - merci, ronak !!



0
votes

Une autre option consiste à scinder avec tstrsplit et diviser xxx


0 commentaires