这是我正在尝试做的事情的示例:
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
的行数是动态的。我正在寻找一个可能涉及 expand
的解决方案来自 tidyr 但我正在挣扎。
最佳答案
这是 dplyr/tidyr 方法
group_by(df, id) %>%
expand(enum_start, enum_end, hello = full_seq(enum_end:enum_start, 1))
不确定是否有一种无需对数据进行分组的 tidyr-way(知道会很有趣)
关于r - 使用 tidyverse 扩展数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471391/