Si vous devez remplacer plusieurs valeurs y en fonction des valeurs de x, une approche posible est:
# define df as data.table
library(data.table)
df <- data.table(x=c(10,20,30,40,50,60,70,80,90), y= c('A', 'B', 'C', 'D','A', 'B', 'C', 'D', 'A'))
> df
x y
1: 10 A
2: 20 B
3: 30 C
4: 40 D
5: 50 A
6: 60 B
7: 70 C
8: 80 D
9: 90 A
# define your pair of values for replacement
a <- c(10,20,50)
b <- c('XYZ', 'ZYX', 'AAA')
# x = 10 will cause y to be replaced by 'XYZ', x= 20 will cause y to be replaced by 'ZYX' and so on ...
# replacement
for (i in 1:length(a)) {
df[ x==a[i], y := b[i]]
}
> df
x y
1: 10 XYZ
2: 20 ZYX
3: 30 C
4: 40 D
5: 50 AAA
6: 60 B
7: 70 C
8: 80 D
9: 90 A
vecteurs a et b pourrait avoir une longueur, mais ont besoin d'être jumelé avec une valeur x et la valeur y.
Avez-vous besoin d'un seul remplacement? Ou y a-t-il beaucoup plus de valeurs que vous voulez changer? –
Selon votre description, vous n'avez pas besoin * multiple * ifelse. Juste un. Sinon, vous pouvez utiliser 'replace' – Sotos
Pour l'élégance, il y a' DT [x == 10, y: = "XYZ"] 'lors de l'utilisation de data.table. Alternativement, oui, 'replace' n'est pas mauvais:' transform (DF, y = remplacer (y, x == 10, "XYZ")) 'ou quelque chose. Si vous avez plus de valeurs à assigner conditionnellement, il y a une "jointure de mise à jour" avec data.table ... http://franknarf1.github.io/r-tutorial/_book/tables.html#joins-update poster un exemple plus complet pour cela, cependant. – Frank