2 votes

Séquence de remplissage par facteur

J'ai besoin de remplir $Year avec les valeurs manquantes de la séquence par le facteur $Country. La colonne $Count peut être complétée par des 0.

Country Year Count
A       1    1
A       2    1
A       4    2
B       1    1
B       3    1

Je me retrouve donc avec

Country Year Count
A       1    1
A       2    1
A       3    0
A       4    2
B       1    1
B       2    0
B       3    1

J'espère que c'est clair, merci d'avance !

2voto

www Points 27760

Autre dplyr y tidyr solution.

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  group_by(Country) %>%
  do(data_frame(Country = unique(.$Country),
                Year = full_seq(.$Year, 1))) %>%
  full_join(dt, by = c("Country", "Year")) %>%
  replace_na(list(Count = 0))

2voto

lmo Points 31046

Voici une approche en base R qui utilise tapply , do.call , range y seq pour calculer les séquences d'années. Il construit ensuite un data.frame à partir de la liste nommée qui est renvoyée, le fusionne avec l'original en y ajoutant les lignes souhaitées et remplit enfin les valeurs manquantes.

# get named list with year sequences
temp <- tapply(dat$Year, dat$Country, function(x) do.call(seq, as.list(range(x))))

# construct data.frame
mydf <- data.frame(Year=unlist(temp), Country=rep(names(temp), lengths(temp)))

# merge onto original
mydf <- merge(dat, mydf, all=TRUE)

# fill in missing values
 mydf[is.na(mydf)] <- 0

Cela renvoie

mydf
  Country Year Count
1       A    1     1
2       A    2     1
3       A    3     0
4       A    4     2
5       B    1     1
6       B    2     0
7       B    3     1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X