Tenir compte des données maquette suivantes:R - Des solutions plus rapides pour la base :: interaction avec les variables de caractères?
df <- data.frame(a=c("John", "Susan", "Eric", "John", "Susan"),
b=c("K", NA, "J", "K", "S"),
c=c("Smith", "Johnson", "May", "Smith", "Johnson"))
df$a <- as.character(df$a)
df$b <- as.character(df$b)
df$c <- as.character(df$c)
qui ressemble à ceci:
> df
a b c
1 John K Smith
2 Susan <NA> Johnson
3 Eric J May
4 John K Smith
5 Susan S Johnson
je produis une colonne appelée unique
qui est titulaire d'un numéro unique sur l'interaction des trois variables de caractère.
J'utilise une déclaration ifelse
pour interagir seulement la colonne a
et c
si la colonne est b
NA
.
df$unique <- NA
df$unique <- ifelse(is.na(df$b),
as.integer(interaction(df$a, df$c)),
as.integer(interaction(df$a, df$b, df$c)))
Il en résulte:
> df
a b c unique
1 John K Smith 23
2 Susan <NA> Johnson 3
3 Eric J May 10
4 John K Smith 23
5 Susan S Johnson 9
Lorsque j'utilise ce code pour construire la variable unique
dans mes réelles données contenant plusieurs millions de lignes, ce calcul fonctionne pendant 21 heures.
Existe-t-il des moyens d'accélérer cette performance? Des solutions plus intelligentes?
Est-ce que le ifelse
est le goulot d'étranglement ici?