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"]))
)
})