r - 使用 tidyverse 扩展数据框

标签 r dplyr tidyr tidyverse

这是我正在尝试做的事情的示例:

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/

相关文章:

r - <U+00A0> 读取csv文件时的特殊字符

r - 为什么 complete() 在我的数据中创建重复的行?

r - 将 LaTex 中的\to 符号放入 R 中的 ggplot2

mysql - 如何在 R 中的 for 循环上进行查询

r - src_snowflakedb() 问题 : 'src_sql' is not an exported object

r - 在 tidyr 中使用 split 在一定数量的字符后分隔列?

R:如何合并两个数据框以获得面板数据?

r - 如何在不知道重复次数的情况下创建由序列组成的新列 - 数据表

r - 安装stringi反复失败

r - 如何将未加引号的列名列表提供给 `lapply`(以便我可以将它与 `dplyr` 函数一起使用)