根据R中每个ID的最小年龄和最大年龄增加多行

时间:2018-09-08 20:49:24

标签: r reshape

我有这个数据集:

现在,我想添加行,其中包含每个id的最小值和最大值之间的所有年龄,例如此数据集:

有人可以给我一些提示吗?预先感谢。

2 个答案:

答案 0 :(得分:1)

这可以通过CHN_PANNING

完成
data.table

答案 1 :(得分:0)

这里是tidyverse的一个选项。我们在map2中用transmute得到'min_age','max_age'的序列,然后在unnest列中list得到预期的输出

library(tidyverse)
DF  %>% 
   transmute(id = id, age = map2(min_age, max_age, `:`)) %>%
   unnest
#   id age
#1   1  60
#2   1  61
#3   1  62
#4   1  63
#5   1  64
#6   1  65
#7   2  55
#8   2  56
#9   2  57
#10  3  72
#11  4  67
#12  4  68
#13  4  69
#14  5  58
#15  5  59
#16  5  60
#17  5  61

或将base RMap一起使用

stack(setNames(do.call(Map, c(f = `:`, DF[-1])), DF$id))[2:1]

数据

DF <- structure(list(id = 1:5, min_age = c(60, 55, 72, 67, 58), max_age = c(65, 
 57, 72, 69, 61)), class = "data.frame", row.names = c(NA, -5L
 ))