2017-07-17 1 views
0

私の供給データフレームを人口データフレームで除算して、1人分のデータフレームを作成したいとします。各データフレームには、項目列、国の列、および複数の年の列(各年のデータの列)があります。国と一致させ、供給データフレームの各エントリを母集団データフレームの対応する値で除算する必要があります。複数の列を条件付きで分割する

提案がありますか?私は何も思い付きませんでした。

+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 
関連する問題