gpt4 book ai didi

r - 根据 data.frame 中的(组)值扩展 data.frame

转载 作者:行者123 更新时间:2023-12-05 02:58:28 25 4
gpt4 key购买 nike

假设我有以下数据框:

tibble(user = c('A', 'B'), first = c(1,4), last = c(6, 9))
# A tibble: 2 x 3
user first last
<chr> <dbl> <dbl>
1 A 1 6
2 B 4 9

并且想要创建一个看起来像这样的标题:

bind_rows(tibble(user = 'A', weeks = 1:6), 
tibble(user = 'B', weeks = 4:9))
# A tibble: 12 x 2
user weeks
<chr> <int>
1 A 1
2 A 2
3 A 3
4 A 4
5 A 5
6 A 6
7 B 4
8 B 5
9 B 6
10 B 7
11 B 8
12 B 9

我该怎么做呢?我试过:

tibble(user = c('A', 'B'), first = c(1,4), last = c(6, 9)) %>% 
group_by(user) %>%
mutate(weeks = first:last)

我想知道我是否应该尝试 complete mapnest 的组合?

最佳答案

一个选项是在创建序列后unnest

library(dplyr)
library(purrr)
df1 %>%
transmute(user, weeks = map2(first, last, `:`)) %>%
unnest(weeks)
# A tibble: 12 x 2
# user weeks
# <chr> <int>
# 1 A 1
# 2 A 2
# 3 A 3
# 4 A 4
# 5 A 5
# 6 A 6
# 7 B 4
# 8 B 5
# 9 B 6
#10 B 7
#11 B 8
#12 B 9

或者另一种选择是rowwise

df1 %>% 
rowwise %>%
transmute(user, weeks = list(first:last)) %>%
unnest(weeks)

或者没有任何包

stack(setNames(Map(`:`, df1$first, df1$last), df1$user))

或者另外写成

stack(setNames(do.call(Map, c(f = `:`, df1[-1])), df1$user))

数据

df1 <- tibble(user = c('A', 'B'), first = c(1,4), last = c(6, 9))

关于r - 根据 data.frame 中的(组)值扩展 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59038952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com