R语言如何使用tidyr::pivot_longer将指定宽表转换为目标长表格式
实现代码
首先需要加载tidyr包(属于tidyverse系列),步骤如下:
1. 构造样例数据
df <- structure(list(ID = 1L, OPEN = 13L, ANSWER = 15L, CLOSE = 17L, OPEN_BY = "ABC", CLOSE_BY = "XXYZ"), class = "data.frame", row.names = c(NA, -1L))
2. 转换代码
library(tidyr) df %>% # 统一列名格式为「动作_属性」,属性分为date(日期值)和user(操作用户) rename_with( .fn = ~ ifelse(!grepl("_BY", .x), paste0(.x, "_date"), sub("_BY", "_user", .x)), .cols = -ID ) %>% pivot_longer( cols = -ID, names_to = c("action_type", ".value"), names_sep = "_" ) %>% # 移除不需要的动作类型列 select(-action_type)
输出结果
# A tibble: 3 × 3 ID date user <int> <int> <chr> 1 1 13 ABC 2 1 15 NA 3 1 17 XXYZ
注:你预期结果里的用户值XYZ为笔误,原数据中CLOSE_BY对应值为XXYZ,输出与原数据保持一致。
内容的提问来源于stack exchange,提问作者Williams86
相关产品推荐
相关产品推荐

