2017-07-17 8 views
0

Ich möchte meinen Versorgungsdatenrahmen durch meinen Populationsdatenrahmen teilen, um einen Datenrahmen pro Kopf zu erstellen. Jeder Datenrahmen hat eine Artikelspalte, eine Länderspalte und mehrere Jahresspalten (eine Spalte für die Daten jedes Jahres). Ich muss das Land abgleichen und dann jeden Eintrag im Versorgungsdatenfeld durch den entsprechenden Wert im Bevölkerungsdatenrahmen dividieren.Mehrere Spalten bedingt teilen

Irgendwelche Vorschläge? Ich konnte mir nichts einfallen lassen.

+1

Bitte zeige ein kleines reproduzierbares Beispiel und erwartete Ausgabe auf dieser Grundlage. Versuchen Sie es mit einem 'merge' oder' left_join' von 'dplyr' und ersetzen Sie die Werte durch Division – akrun

+1

Willkommen bei StackOverflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Sotos

Antwort

1

Vielleicht kann dies helfen, n die richtige Richtung:

# sample data 
population = data.frame(country = c("A","B"),population = c(100,200)) 
data = data.frame(country=c("A","B"), y2016 = c(1000,2000), y2017=c(2000,3000)) 

library(dplyr) 
# join the population and the data dataframe based on the 'country' column. 
data =data %>% left_join(population) 

# divide all columns except the columns 'country' and 'population' by the population column. 
data[, colnames(data)[!colnames(data) %in% c("country","population")]] = data[, colnames(data)[!colnames(data) %in% c("country","population")]]/data$population 

Eingang:

> population 
    country population 
1  A  100 
2  B  200 
> data 
    country y2016 y2017 
1  A 1000 2000 
2  B 2000 3000 

Ausgang:

country y2016 y2017 population 
1  A 10 20  100 
2  B 10 15  200 

hoffe, das hilft!

1

Wir data.table verwenden

library(data.table) 
i1 <- grep("year", names(df1)) 
i2 <- paste0("i.", i1) 
setDT(df1)[df2, (i1) := Map(`/`, mget(i1), mget(i2)), on = .(country)] 
df1 
Verwandte Themen