【发布时间】:2017-01-04 19:02:07
【问题描述】:
这是我正在尝试做的一个示例:
df <- data.frame(
id = letters[1:5],
enum_start = c(1, 1, 1, 1, 1),
enum_end = c(1, 5, 3, 7, 2)
)
df2 <- df %>%
split(.$id) %>%
lapply(function(x) cbind(x, hello = seq(x$enum_start, x$enum_end, by = 1L))) %>%
bind_rows
df2
# id enum_start enum_end hello
# 1 a 1 1 1
# 2 b 1 5 1
# 3 b 1 5 2
# 4 b 1 5 3
# 5 b 1 5 4
# 6 b 1 5 5
# 7 c 1 3 1
# 8 c 1 3 2
# 9 c 1 3 3
# 10 d 1 7 1
# 11 d 1 7 2
# 12 d 1 7 3
# 13 d 1 7 4
# 14 d 1 7 5
# 15 d 1 7 6
# 16 d 1 7 7
# 17 e 1 2 1
# 18 e 1 2 2
请注意,hello 的起始值和结束值取决于数据,因此每个 id 的行数是动态的。我正在寻找可能涉及来自 tidyr 的 expand 但我正在苦苦挣扎的解决方案。
【问题讨论】:
-
hello代表什么? -
与
data.table你可以这样做:setDT(df)[,list(enum_start,enum_end,hello=seq(enum_start,enum_end)),by=id]