Remplacer les occurrences d'un nombre dans plusieurs colonnes de données d'image avec une autre valeur dans R
ETA: le point de le ci-dessous, par ailleurs, est de ne pas avoir à parcourir l'ensemble de mon ensemble de vecteurs colonnes, juste au cas où c'était une proposition de solution (il suffit de faire ce qui est connu à travailler une fois à un moment).
Il y a beaucoup d'exemples de remplacer les valeurs dans un unique vecteur d'un bloc de données dans R avec une autre valeur.
- Remplacer une valeur dans un bloc de données basé sur un conditionnel (
if
) déclaration en R - remplacer les numéros dans le bloc de données de la colonne dans r [dupliquer]
Et aussi comment remplacer toutes les valeurs de NA
avec quelque chose d'autre:
Ce que je cherche est analogue à la dernière question, mais en fait, d'essayer de remplacer une valeur par une autre. Je vais avoir de la difficulté à générer une trame de données de valeurs logiques mappé à mon bloc de données pour les cas où plusieurs colonnes de répondre à un des critères, ou tout simplement essayer de faire les actions de la première des deux questions sur plus d'une colonne.
Un exemple:
data <- data.frame(name = rep(letters[1:3], each = 3), var1 = rep(1:9), var2 = rep(3:5, each = 3))
data
name var1 var2
1 a 1 3
2 a 2 3
3 a 3 3
4 b 4 4
5 b 5 4
6 b 6 4
7 c 7 5
8 c 8 5
9 c 9 5
Et dire que je veux de toutes les valeurs de 4
dans var1
et var2
être 10
.
Je suis sûr que c'est élémentaire et je ne suis pas réfléchir correctement. J'ai essayé des choses comme:
data[data[, 2:3] == 4, ]
Qui ne fonctionne pas, mais si je fais la même chose avec data[, 2]
au lieu de data[, 2:3]
, les choses fonctionnent bien. Il semble que le test logique (comme is.na()
) à travailler sur plusieurs lignes/colonnes, mais que les comparaisons numériques ne sont pas jouer en tant que bien?
Merci pour toutes les suggestions!
OriginalL'auteur Hendy | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
vous souhaitez faire une recherche dans l'ensemble de la trame de données pour toute valeur qui correspond à la valeur que vous essayez de le remplacer. de la même façon, vous pouvez exécuter un test logique, comme le remplacement de toutes les valeurs manquantes par 10..
vous pouvez également remplacer toutes les 4s avec 10s.
au moins je pense que c'est ce que vous recherchez?
et disons que vous avez voulu ignorer la première ligne (puisque c'est toutes les lettres)
Je retournement jure que j'ai essayé et ça ne marchait pas pour moi avant. J'espère arriver au point où je ne me suis lancer à chaque fois que je poste à... -- vous êtes le 1min R gars vidéo, n'est-ce pas!? Ces rock.
ils sont les deux minutes 😉 onetorials.com est un nom stupide 😛
OriginalL'auteur Anthony Damico
Fondamentalement
data[, 2:3]==4
vous a donné l'index pourdata[,2:3]
au lieu dedata
:De sorte que vous pouvez essayer ceci:
Merci pour cette; fonctionne également. Je pense juste que celui d'Anthony est un peu plus simple. Grand merci pour expliquer pourquoi le mien ne fonctionnait pas bien; après avoir joué un peu plus, je vois ce que tu veux dire: moi, en essayant d'appliquer des valeurs de données basée sur une comparaison qui a été aussi . fait beaucoup plus de sens.
OriginalL'auteur liuminzhao
Juste pour donner une réponse différente, j'ai pensé que je pourrais écrire un vecteur de mathématiques approche:
Vous pouvez créer une matrice de transformation (vraiment un bloc de données ici, mais le travail sera le même), en utilisant la vectorisé 'ifelse' instruction et de multiplier la matrice de transformation et de vos données d'origine, comme suit:
Pour remplacer toutes les valeurs de 4 à 10 dans le bloc de données "data" dans les colonnes 2 et 3, vous pouvez utiliser la fonction comme ceci:
test
devrait êtredata
, non? 🙂Ouais, je l'ai pris juste après que j'ai posté.
OriginalL'auteur Dinre
Juste pour la continuité
Mais il semble laid, Donc le faire en 2 étapes, c'est mieux.
<- 10
? 🙂merci! - Je mettre à jour ma réponse!
OriginalL'auteur agstudy