我有兩個資料框,我想通過一列中最接近的值進行合并。第一個資料框(DF1)由個人及其估計的個人風險(“風險”)組成:
DF1<- data.frame(ID = c(1, 2, 3), risk = c(22, 40, 20))
ID risk
1 22
2 40
3 20
第二個資料框(DF2)由年齡組的人口(“population_age”)和每個年齡組內的正常風險(“population_normal_risk”)組成:
DF2<- data.frame(population_age = c("30-34","35-39","40-44"), population_normal_risk = c(15, 30, 45))
population_age population_normal_risk
30-34 15
35-39 30
40-44 45
我想要的是在 DF1 資料框中添加一個新列,顯示具有最接近每個人的估計風險(“風險”)的風險值(“population_normal_risk”)的人口年齡組(“population_age”)。
我期望的是:
ID risk population_age_group
1 22 30-34
2 40 40-44
3 20 30-34
提前致謝!
uj5u.com熱心網友回復:
我們可以使用findInterval.
首先,我們需要在人口風險值之間的中間點計算我們的斷點:
breaks <- c(0, df2$population_normal_risk c(diff(df2$population_normal_risk) / 2, Inf))
然后用于findInterval檢測我們的風險屬于哪個 bin:
matches <- findInterval(df1$risk, breaks)
最后,將匹配項寫入:
df1$population_age <- df2$population_age[matches]
給我們:
df1
ID risk population_age
1 1 22 30-34
2 2 40 40-44
3 3 20 30-34`
uj5u.com熱心網友回復:
outer我們可以使用 試試下面的代碼max.col
transform(
DF1,
population_age = DF2[max.col(-abs(outer(risk, DF2$population_normal_risk, `-`))), "population_age"]
)
這使
ID risk population_age
1 1 22 30-34
2 2 40 40-44
3 3 20 30-34
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450205.html
