Vérifier si chaque ligne a le nom de la colonne apparaître dans un autre data.frame, rapport TRUE et FALSE
Molly_K
Je voudrais remplir df3
avec TRUE ou FALSE si le code est présent dans df2
. Je n'ai pas trouvé de mots simples pour le décrire, j'ai donc créé des exemples de jouets ci-dessous. J'ai essayé do.call(paste0, df3) %in% do.call(paste0, df2)
, mais il ne rapporte pas ce dont j'avais besoin et je n'étais pas sûr de ce qu'il rapportait. Quelqu'un pourrait-il me diriger vers une fonction que je pourrais utiliser?
df0=data.frame(ID=paste0("id_",1:5), Code=paste0("00",seq(1,10,2)))
df1=data.frame(ID=rep(paste0("id_",1:2)), Code=paste0("00",seq(1,10,3)))
df2=rbind.data.frame(df0,df1)
df3=data.frame(ID=unique(df2$ID))
namevector <- as.character(unique(df2$Code))
df3[ , namevector] <- NA
> df2
ID Code
1 id_1 001
2 id_2 003
3 id_3 005
4 id_4 007
5 id_5 009
6 id_1 001
7 id_2 004
8 id_1 007
9 id_2 0010
> df3
ID 001 003 005 007 009 004 0010
1 id_1 NA NA NA NA NA NA NA
2 id_2 NA NA NA NA NA NA NA
3 id_3 NA NA NA NA NA NA NA
4 id_4 NA NA NA NA NA NA NA
5 id_5 NA NA NA NA NA NA NA
Allan Cameron
Dans la base R, vous pouvez le faire très simplement en une seule ligne :
table(df2$ID, df2$Code) > 0
#> 001 0010 003 004 005 007 009
#> id_1 TRUE FALSE FALSE FALSE FALSE TRUE FALSE
#> id_2 FALSE TRUE TRUE TRUE FALSE FALSE FALSE
#> id_3 FALSE FALSE FALSE FALSE TRUE FALSE FALSE
#> id_4 FALSE FALSE FALSE FALSE FALSE TRUE FALSE
#> id_5 FALSE FALSE FALSE FALSE FALSE FALSE TRUE
Ou, comme le souligne Akrun, même simplement :
table(df2) > 0
#> Code
#> ID 001 0010 003 004 005 007 009
#> id_1 TRUE FALSE FALSE FALSE FALSE TRUE FALSE
#> id_2 FALSE TRUE TRUE TRUE FALSE FALSE FALSE
#> id_3 FALSE FALSE FALSE FALSE TRUE FALSE FALSE
#> id_4 FALSE FALSE FALSE FALSE FALSE TRUE FALSE
#> id_5 FALSE FALSE FALSE FALSE FALSE FALSE TRUE