Comment puis-je identifier et générer une nouvelle variable qui identifie les observations appartenant à différents groupes. Disons que j'ai l'ensemble de données suivant:
ID | country | side | sideuk 1 | arg | 1 | 0 1 | usa | 0 | 0 2 | ita | 1 | 1 2 | usa | 0 | 0 2 | uk | 1 | 1 3 | aus | 0 | 0 3 | uk | 1 | 1
et que je souhaite créer une nouvelle variable (sideUK) qui identifie si le pays "uk" était impliqué dans l'ID et le côté de chaque pays. Donc, par exemple, ce serait:
ID | country | side 1 | arg | 1 1 | usa | 0 2 | ita | 1 2 | usa | 0 2 | uk | 1 3 | aus | 0 3 | uk | 1
3 Réponses :
Je ne suis pas tout à fait sûr de ce que vous recherchez, mais ce qui suit reproduit votre résultat attendu
df <- read.table(text = "ID country side 1 arg 1 1 usa 0 2 ita 1 2 usa 0 2 uk 1 3 aus 0 3 uk 1", header = T)
library(dplyr) df %>% group_by(ID) %>% mutate(sideuk = +("uk" %in% country & side == 1)) %>% ungroup() ## A tibble: 7 x 4 # ID country side sideuk # <int> <fct> <int> <int> #1 1 arg 1 0 #2 1 usa 0 0 #3 2 ita 1 1 #4 2 usa 0 0 #5 2 uk 1 1 #6 3 aus 0 0 #7 3 uk 1 1
Vous souhaitez grouper par ID, puis rechercher 'uk'
dans la variable country
df %>% group_by(ID, side) %>% mutate(sideuk = as.integer('uk' %in% country)) # A tibble: 7 x 4 # Groups: ID, side [6] ID country side sideuk <dbl> <fct> <dbl> <int> 1 1 arg 1 0 2 1 usa 0 0 3 2 ita 1 1 4 2 usa 0 0 5 2 uk 1 1 6 3 aus 0 0 7 3 uk 1 1
Je ne sais pas si c'est ce que vous recherchez. C'est une solution sans bibliothèques externes:
df <- read.table(text = "ID country side 1 arg 1 1 usa 0 2 ita 1 2 usa 0 2 uk 1 3 aus 0 3 uk 1 4 mx 1 4 uk 0", header = T)
Renvoie:
ID country side sideuk 1 1 arg 1 0 2 1 usa 0 0 3 2 ita 1 1 4 2 usa 0 0 5 2 uk 1 1 6 3 aus 0 0 7 3 uk 1 1 8 4 mx 1 0 9 4 uk 0 0
df$sideuk <- apply(df, 1, function(row) { return( as.integer(any(df[df$ID==row["ID"] & df$country=="uk" & row["side"] == 1, "side"])) ) })