私の供給データフレームを人口データフレームで除算して、1人分のデータフレームを作成したいとします。各データフレームには、項目列、国の列、および複数の年の列(各年のデータの列)があります。国と一致させ、供給データフレームの各エントリを母集団データフレームの対応する値で除算する必要があります。複数の列を条件付きで分割する
提案がありますか?私は何も思い付きませんでした。
私の供給データフレームを人口データフレームで除算して、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
は、この情報がお役に立てば幸い!
我々は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
を使用することができますそれに基づいて、小さな再現性の例と予想される出力を示してください。 'dplyr'から' merge'または 'left_join'を試して、値を – akrun
に分けて置き換えてみてください。StackOverflowへようこそ! [良い質問をする方法](http://stackoverflow.com/help/how-to-ask)と[再現可能な例を与える方法](http://stackoverflow.com/questions/)の情報をお読みください。 5963269)。これは他の人があなたを助けることをはるかに容易にします。 – Sotos