如何在R [duplicate]中拆分和合并匹配的列表列和pivot longer

qv7cva1a  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(99)

此问题在此处已有答案

tidyr use separate_rows over multiple columns(3个答案)
3天前关闭。
此帖子已于3天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
我有这样的数据:

library(tidyverse)
data <- tibble(id = 1:3,
       events = c("E1/E2/E3", "E3/E2", "E1"),
       times = c("10/20/30", "35/20", "15"))

对于每个id,都有一个列,其中包含由/分隔的事件列表,以及这些事件的时间列表也由/分隔。事件和时间按位置匹配。我想将此数据转换为一个整洁的格式,其中有一个包含事件名称和时间的列,对于每个单独的event:time组合,id重复。
我想要的格式看起来像这样:

desired <- tibble(id = c(1,1,1,2,2,3),
       event = c("E1", "E2", "E3", "E3", "E2", "E1"),
       time = c(10, 20, 30, 35, 20, 15))

我在概念上考虑过使用pivot long,但我不确定如何做到这一点,因为我几乎是在列值内旋转。还尝试将列拆分为多个,但我遇到了每个id的事件顺序和数量不同的问题。感谢您的帮助!
编辑:有一个类似的问题问的概念;然而,这个问题已经在标题中确定了一个函数来执行此操作,并且可能很难找到:tidyr use separate_rows over multiple columns

7y4bm7vi

7y4bm7vi1#

你可以在两列上使用separate_rows from tidyrsep = "/",你想像这样分开:

library(tidyr)
data |>
  separate_rows(c(events, times), sep = "/")
#> # A tibble: 6 × 3
#>      id events times
#>   <int> <chr>  <chr>
#> 1     1 E1     10   
#> 2     1 E2     20   
#> 3     1 E3     30   
#> 4     2 E3     35   
#> 5     2 E2     20   
#> 6     3 E1     15

创建于2023年3月30日,使用reprex v2.0.2

相关问题