我有这样的数据:
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/