我有这样的数据:

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

对于每个id,有一列包含由/分隔的事件列表,以及也由/分隔的这些事件的时间列表.事件和时间按位置匹配.我希望将这些数据转换为一种整洁的格式,其中有一个包含事件名称和时间的列,每个单独的事件都有重复的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,但我不确定如何做到这一点,因为我几乎要在列值中进行透视.我还try 将列拆分成多个列,但我遇到了每个id有不同的顺序和事件数量的问题.谢谢你的帮助!

编辑:在概念上也有类似的问题;但是,这个问题已经在标题中确定了执行此操作的函数,可能很难找到: tidyr use separate_rows over multiple columns

推荐答案

您可以使用tidyr中的separate_rows,在要分隔的两列上使用sep = "/",如下所示:

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-03-30,共reprex v2.0.2

R相关问答推荐

使用sensemakr和fixest feols模型(R)

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

在垂直轴中包含多个ggplot2图中的平均值

单个轮廓重叠条的单独图例

如何自定义3D散点图的图例顺序?

根据元素和前一个值之间的差值过滤矩阵的元素

`夹心::vcovCL`不等于`AER::tobit`标准错误

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

KM估计的差异:SvyKm与带权重的调查

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

如何使用For-R循环在向量中找到一系列数字

将具有坐标列表列的三角形转换为多个多边形

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

Conditional documentr::R中数据帧的summarize()

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

在一个multiplot中以非对称的方式在R中绘制多个图

Data.table条件合并

将`magick`对象转换为原始向量