R:从预先存在的数据帧创建新行

You*_*ser 4 r dplyr tidyr tidyverse data-wrangling

我想根据数据集中预先存在的行的值创建新行。有两个问题:首先,某些单元格值需要保持不变,而其他单元格值必须增加 +1。其次,我需要以相同的次数循环遍历每一行。

我觉得用数据会更容易理解

我从这里开始:

mydata <- data.frame(id=c(10012000,10012002,10022000,10022002),
                     col1=c(100,201,44,11),
                     col2=c("A","C","B","A"))
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

mydata2 <- data.frame(id=c(10012000,10012001,10012002,10012003,10022000,10022001,10022002,10022003),
                     col1=c(100,100,201,201,44,44,11,11),
                     col2=c("A","A","C","C","B","B","A","A"))
Run Code Online (Sandbox Code Playgroud)

请注意我如何在每个新行的 id 列单元格中添加 +1,但 col1 和 col2 保持不变。

谢谢

shs*_*shs 7

library(tidyverse)\n\nmydata |> \n  mutate(id = map(id, \\(x) c(x, x+1))) |> \n  unnest(id)\n#> # A tibble: 8 \xc3\x97 3\n#>         id  col1 col2 \n#>      <dbl> <dbl> <chr>\n#> 1 10012000   100 A    \n#> 2 10012001   100 A    \n#> 3 10012002   201 C    \n#> 4 10012003   201 C    \n#> 5 10022000    44 B    \n#> 6 10022001    44 B    \n#> 7 10022002    11 A    \n#> 8 10022003    11 A\n
Run Code Online (Sandbox Code Playgroud)\n

由reprex 包于 2022 年 4 月 14 日创建(v2.0.1)

\n

  • 这是一个匿名函数。也许您正在运行旧版本的“R”。考虑更新。`\(x)` 可以替换为 `function(x)`。 (3认同)