使用R我根据分布的组合计算年龄。然后这个年龄与一个人的预期寿命相关联,这个期望列在一个表格中(或者最方便的方式),如下所示:
age exp_life
0-5 80
6-10 75.38
11-15 70.4
16-20 65.41
21-25 60.44
26-30 etc..
所以例如7岁对应75.38,如何在R中轻松编程来查看呢?
非常感谢。
答案 0 :(得分:2)
使用findInterval()
查找与exp_life
间隔对应的age
。
使用类似于上一个答案的设置(但不需要创建整个查找表 - 如果您的年龄输入不是整数,则无论如何都不会工作)。
df <- read.table(header=TRUE,
text="age exp_life
0-5 80
6-10 75.38
11-15 70.4
16-20 65.41
21-25 60.44
26-30 etc..",
stringsAsFactors =FALSE)
library(tidyr); library(dplyr)
df %>%
separate(age, into=c('from_age','to_age'), sep='-') %>%
mutate_each(funs(as.numeric)) %>%
arrange(from_age) -> df # in case it's not sorted
df$exp_life[findInterval(7, df$from_age)] # returns [1] 75.38
答案 1 :(得分:-1)
这是一个使用包dplyr
和tidyr
的流程,以便生成一个新的数据集,其中包含“年龄段”级别和“年龄值”级别的信息:
# example dataset
dt = read.table(text=
"age exp_life
0-5 80
6-10 75.38
11-15 70.4
16-20 65.41
21-25 60.44", header=T)
library(tidyr)
library(dplyr)
dt %>%
separate(age, c("low","high")) %>% # split your range values into low and high
mutate(low = as.numeric(low), # make those columns numeric
high = as.numeric(high)) %>%
rowwise() %>% # for each row
do(data.frame(.,
age_val=seq(.$low,.$high,1))) %>% # get all possible age values and combine them with ranges and exp_life values
ungroup
# low high exp_life age_val
# 1 0 5 80.00 0
# 2 0 5 80.00 1
# 3 0 5 80.00 2
# 4 0 5 80.00 3
# 5 0 5 80.00 4
# 6 0 5 80.00 5
# 7 6 10 75.38 6
# 8 6 10 75.38 7
# 9 6 10 75.38 8
# 10 6 10 75.38 9
# 11 6 10 75.38 10
# 12 11 15 70.40 11
# 13 11 15 70.40 12
# 14 11 15 70.40 13
# 15 11 15 70.40 14
# 16 11 15 70.40 15
# 17 16 20 65.41 16
# 18 16 20 65.41 17
# 19 16 20 65.41 18
# 20 16 20 65.41 19
# 21 16 20 65.41 20
# 22 21 25 60.44 21
# 23 21 25 60.44 22
# 24 21 25 60.44 23
# 25 21 25 60.44 24
# 26 21 25 60.44 25