我想按人口数据框划分供应数据框,以创建人均供应数据框架。每个数据框都有一个项目列,一个国家/地区列和多年列(每年的列数据)。我需要匹配国家/地区,然后将供应数据框中的每个条目除以人口数据框中的相应值。
有什么建议吗?我还没有能够拿出任何东西。
答案 0 :(得分:1)
也许这可以帮助你找到正确的方向:
# 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
输入:
> population
country population
1 A 100
2 B 200
> data
country y2016 y2017
1 A 1000 2000
2 B 2000 3000
输出:
country y2016 y2017 population
1 A 10 20 100
2 B 10 15 200
希望这有帮助!
答案 1 :(得分:1)
我们可以使用data.table
library(data.table)
i1 <- grep("year", names(df1))
i2 <- paste0("i.", i1)
setDT(df1)[df2, (i1) := Map(`/`, mget(i1), mget(i2)), on = .(country)]
df1