1
votes

Ajout de valeurs de colonne dans le dataframe avec des caractères communs dans le titre

J'ai un R dataFrame avec plusieurs colonnes. J'ai l'intention de nettoyer les données en ajoutant des colonnes ensemble en fonction de la présence de certains caractères communs dans le titre.

exemple simple

pax <- grep("pax", names(df))
df_demand <- data.frame("date" = df$date, "bookings" = rowSums(df[pax]))

résultat attendu: ajouter toutes les colonnes avec les caractères pax dans une nouvelle colonne "réservations"

I need to put a logic such that I am adding columns with the characters pax

Je n'utilise pas le simple

df_demand <- data.frame("date" = df$date, "bookings" = df$grep("pax", names(df)))


0 commentaires

3 Réponses :


0
votes

Nous pouvons obtenir les rowSums des colonnes autres que la première et créer un data.frame avec la première colonne de l'ensemble de données d'origine

df1 <- structure(list(date = c("2019-03-11", "2019-03-12", "2019-03-13"
 ), go_pax = c(7L, 11L, 20L), full_pax = c(23L, 5L, 4L), plus_pax = c(14L, 
 6L, 37L)), class = "data.frame", row.names = c(NA, -3L))


0 commentaires

2
votes

Avec tidyverse , vous pouvez essayer:

df %>%
 select(date, contains("_pax")) %>%
 transmute(date = date,
           bookings = rowSums(.[2:length(.)]))

Ou avec simplement dplyr:

df %>%
 select(date, contains("_pax")) %>%
 gather(var, val, -date) %>%
 group_by(date) %>%
 summarise(bookings = sum(val))

    date       bookings
  <chr>         <int>
1 2019-03-11       44
2 2019-03-12       22
3 2019-03-13       61


0 commentaires

0
votes

Utilisation de sapply

df = data.frame(df[,1],
                "bookings" = sapply(1:nrow(df), function(x) sum(df[x, grep('pax', colnames(df))])))


2 commentaires

Je pense qu'une meilleure option si vous faites somme serait apply (df [grep ('pax', names (df))], 1, sum)


Oui, ce serait mieux.