首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tidyverse扩展数据帧

使用tidyverse扩展数据帧
EN

Stack Overflow用户
提问于 2017-01-05 03:02:07
回答 2查看 1.1K关注 0票数 2

下面是我想要做的一个例子:

代码语言:javascript
复制
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,但我正在努力。

EN

回答 2

Stack Overflow用户

发布于 2017-01-05 03:28:34

下面是dplyr/tidyr方法

代码语言:javascript
复制
group_by(df, id) %>% 
  expand(enum_start, enum_end, hello = full_seq(enum_end:enum_start, 1))

不确定是否有一种不对数据进行分组的整齐方式(知道会很有趣)

票数 2
EN

Stack Overflow用户

发布于 2017-01-05 03:20:27

下面是一个生成所需输出的基本R方法。

代码语言:javascript
复制
dfNew <- within(df[rep(seq_len(nrow(df)), df$enum_end), ],
                hello <- sequence(df$enum_end))

sequence将返回自然数并获取一个允许重复计算的向量。它用于生成"hello“变量。within减少了输入并返回修改后的data.frame。我给它提供了一个扩展版本的df,其中使用rep[重复行。

代码语言:javascript
复制
dfNew
    id enum_start enum_end hello
1    a          1        1     1
2    b          1        5     1
2.1  b          1        5     2
2.2  b          1        5     3
2.3  b          1        5     4
2.4  b          1        5     5
3    c          1        3     1
3.1  c          1        3     2
3.2  c          1        3     3
4    d          1        7     1
4.1  d          1        7     2
4.2  d          1        7     3
4.3  d          1        7     4
4.4  d          1        7     5
4.5  d          1        7     6
4.6  d          1        7     7
5    e          1        2     1
5.1  e          1        2     2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41471391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档