r - Pivot_longer 正则表达式,配对特定列

标签 r

我有这样的数据:

df<-structure(list(MultipleDrains = structure(c(1L, 2L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L), .Label = c("Single Drain", "Multiple Drains"
), class = "factor"), draindays1 = structure(c(6, 12, 13, 6, 
10, NA, 19, 22, 39, 30), label = "Drain duration (days)", class = c("labelled", 
"numeric")), placedrain1 = structure(c(2L, 2L, 1L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L), .Label = c("Superficial", "Deep"), class = c("labelled", 
"factor"), label = "Drain 1 Placement"), typedrain1 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("Blake", "Jackson Pratt", 
"Hemovac"), class = c("labelled", "factor"), label = "Drain 1 Type"), 
    sizedrain1 = structure(c(2L, 2L, 2L, 2L, 3L, 3L, 3L, NA, 
    2L, 2L), .Label = c("10", "15", "19"), class = c("labelled", 
    "factor"), label = "Drain 1 Size"), draindays2 = c(NA, 12, 
    NA, 17, 8, NA, 41, 9, 39, NA), placedrain2 = c(NA, 1, NA, 
    1, 2, 2, 1, 2, 2, 2), typedrain2 = c(NA, 1, NA, 1, 1, 1, 
    1, 2, 1, 1), sizedrain2 = c(NA, "15", NA, "15", "19", "19", 
    "15", NA, "15", "15"), draindays3 = c(NA, NA, NA, NA, 21, 
    NA, NA, NA, NA, NA), placedrain3 = c(NA, NA, NA, NA, 1, 1, 
    NA, NA, NA, NA), typedrain3 = c(NA, NA, NA, NA, 1, 1, NA, 
    NA, NA, NA), sizedrain3 = c(NA, NA, NA, NA, "19", NA, NA, 
    NA, NA, NA)), row.names = c(NA, 10L), class = "data.frame")

这是关于在伤口中放置引流管的患者的。有些患者放置了多个引流管。

我想保留关于每个排水管的 4 个变量:

  • draindays(它所处的天数)
  • placedrain(它所在的地方)
  • typedrain(它的类型)
  • 尺寸雨(尺寸)

但现在存在与每个患者的多个引流相对应的变量,例如draindays1、draindays2、draindays3。我想将数据框旋转更长的时间并堆叠这些变量(所有的放置的雨将被堆叠,所有的尺寸的雨将被堆叠,等等)。 “multipledrains”将被保留。

另外,现在我知道 typedrain1 与 typedrain2 或 typedrain3 具有不同类型的值(与 placerain 相同),但我可以稍后修复它。

我的最终结果只有 5 列:MultipleDrains、draindays、placedrain、typedrain 和 sizedrain。

有人可以帮助我使用pivot_longer代码吗?

最佳答案

我们可能需要将列类型转换为相同的类型,因为某些列与其他列相比具有不同的类型 - pivot_longer 在将它们绑定(bind)到单个列之前检查列类型,以及是否存在类型差异的单一情况,会引发错误。

library(dplyr)
library(tidyr)
df %>%
   mutate(across(everything(), as.character)) %>% 
   pivot_longer(cols = -MultipleDrains, names_to = c(".value"), 
      names_pattern = "^(\\D+)\\d+", values_drop_na = TRUE)

代码将所有列转换为字符,因为因子级别匹配中也可能存在一些问题,与labelled<类似 列。在 pivot_longer 中,我们使用 names_pattern 捕获非数字字符 ((\\D+)) 并删除数字 (\\d+)在最后

关于r - Pivot_longer 正则表达式,配对特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71269451/

相关文章:

r - dbutils.fs.mount() 适用于 Python,但不适用于 R?

r - 使用 "curve"绘制函数 : a tricky expression?

RSQLite:如何增加列数和参数?

r - 如果组中的行数超过 X 个观察值,则随机抽样 X 个行数

r - 在 R 中的 rename() 函数内部使用外部变量

r - 保存时空的R环境变成大文件

R:计算图片中的对象

r - 有没有办法知道 R 脚本是直接运行还是在另一个脚本中运行?

r - 从R中没有日期的两个时间值计算持续时间

r - lapply() 与用户输入