# Exercicis de taules (data frames) # Exercici 18 despeses en fruites # versio més intel.ligent que usa filtres # per extreure subdata frames # funcions calcula <- function(D1, D2){ dfm <- merge(D1, D2) # extraccio en un vector dels noms sense repeticio noms <- vector() for (i in 1 : nrow(dfm)){ nom <- dfm$nom[i] if (!(nom %in% noms)){ noms <- c(noms, nom) } } # calcul de la suma de despeses per a cada nom dfFinal <- data.frame(nom = character(0), despesa = numeric(0), stringsAsFactors = FALSE) for (nomAux in noms){ dfAux <- subset(dfm, nom == nomAux) ### EXTRACCIO SUB D.F. despesaTotal <- 0 for (i in 1 : nrow(dfAux)){ despesaTotal <- despesaTotal + dfAux$Kg[i] * dfAux$preuKg[i] } # s'afegeixen les despeses d'un nom al data frame final fila <- data.frame(nom = nomAux, despesa = despesaTotal, stringsAsFactors = FALSE) dfFinal <- rbind(dfFinal, fila) } # ordeancio per la variable nom del data frame final dfFinal <- dfFinal[order(dfFinal$nom),] return(dfFinal) } # programa nom <- c("Pep", "Kim", "Pep", "Maria", "Maria", "Albert", "Pep") producte <- c("pomes", "peres", "peres", "pomes", "platans","cireres", "figues") Kg <- c(5, 3, 1.5, 3, 2, 3.5, 5) D1 <- data.frame(nom, producte, Kg, stringsAsFactors=FALSE) producte <- c("pomes", "peres", "platans", "cireres", "figues") preuKg <- c(2.5, 3.0, 4.5, 6.0, 5.5) D2 <- data.frame(producte, preuKg, stringsAsFactors=FALSE) #cat("\n D1 \n") #print(D1) #cat("\n D2 \n") #print(D2) df <- calcula(D1, D2) cat("\n df \n") print(df)