在 R 中创建具有特定长度的序列

use*_*095 4 r sequence

我正在尝试创建一个路径序列。以下是示例数据集:

df <- structure(list(
  sess_id = c(4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7), 
  Page = c("A", "B", "C", "D", "A", "C", "B", "B", "C", "D", "A", "D")),
  .Names = c("sess_id", "Page"),
  row.names = c(NA, -12L),
  class = "data.frame")

Run Code Online (Sandbox Code Playgroud)

这是表:

会话ID
4 A
4
4 C
4 D
4 A
4 C
4
7
7 C
7 D
7 A
7 D

我想添加三列,如下所示:

会话ID 小路 开始 结尾
4 A
4 AB A
4 C ABC A C
4 D A B C D A D
4 A ABCDA A A
4 C BCDAC C
4 CDACB C
7
7 C 公元前 C
7 D BCD D
7 A BCDA A
7 D BCAD D

我试图在每个会话中创建一个包含五个页面的路径序列。并绘制该五页序列的开头和结尾。

Tho*_*ing 5

更新

\n

如果您不想将元​​素保留Path为字符串,可以使用

\n
df %>%\n  group_by(sess_id) %>%\n  mutate(Path = lapply(accumulate(Page, c), last, 5)) %>%\n  ungroup() %>%\n  mutate(\n    Start = Page[pmax(1, (1:n()) - 4)],\n    End = Page\n  )\n
Run Code Online (Sandbox Code Playgroud)\n

这使

\n
# A tibble: 12 \xc3\x97 5\n   sess_id Page  Path      Start End  \n     <dbl> <chr> <list>    <chr> <chr>\n 1       4 A     <chr [1]> A     A\n 2       4 B     <chr [2]> A     B\n 3       4 C     <chr [3]> A     C\n 4       4 D     <chr [4]> A     D\n 5       4 A     <chr [5]> A     A\n 6       4 C     <chr [5]> B     C\n 7       4 B     <chr [5]> C     B\n 8       7 B     <chr [1]> D     B\n 9       7 C     <chr [2]> A     C\n10       7 D     <chr [3]> C     D\n11       7 A     <chr [4]> B     A\n12       7 D     <chr [5]> B     D\n
Run Code Online (Sandbox Code Playgroud)\n
\n

以前的解决方案

\n

您可以使用accumulate+substr如下所示

\n
library(dplyr)\nlibrary(purrr)\n\ndf %>%\n  group_by(sess_id) %>%\n  mutate(Path = accumulate(Page, paste0)) %>%\n  ungroup() %>%\n  mutate(\n    Path = substr(Path, nchar(Path) - 4, nchar(Path)),\n    Start = substr(Path, 1, 1),\n    End = Page\n  )\n
Run Code Online (Sandbox Code Playgroud)\n

这使

\n
# A tibble: 12 \xc3\x97 5\n   sess_id Page  Path  Start End  \n     <dbl> <chr> <chr> <chr> <chr>\n 1       4 A     A     A     A\n 2       4 B     AB    A     B\n 3       4 C     ABC   A     C\n 4       4 D     ABCD  A     D\n 5       4 A     ABCDA A     A\n 6       4 C     BCDAC B     C\n 7       4 B     CDACB C     B\n 8       7 B     B     B     B\n 9       7 C     BC    B     C\n10       7 D     BCD   B     D\n11       7 A     BCDA  B     A\n12       7 D     BCDAD B     D\n
Run Code Online (Sandbox Code Playgroud)\n