2017-07-17 39 views
0

我想按我的人口数据框划分我的供应数据框,以创建供应人均数据框。每个数据框都有一个项目栏,一个国家栏和多个年份栏(每年的数据栏)。我需要匹配国家,然后将供应数据框中的每个条目除以总体数据框中的相应值。有条件地划分多列

有什么建议吗?我一直未能拿出任何东西。

+1

请出示基于这样一个小的可重复的例子和预期产出。尝试使用'dplyr'中的'merge'或'left_join',并将值除以 – akrun

+1

欢迎使用StackOverflow!请阅读关于[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)以及如何给出[可重现的示例]的信息(http://stackoverflow.com/questions/ 5963269)。这会让其他人更容易帮助你。 – Sotos

回答

1

也许这可以帮助你n个正确的方向:

# 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

我们可以使用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