r - 使用通用名称重新排序列 - dplyr
问题描述
我的数据来自一个数据库,根据我运行 SQL 查询的时间,该数据库可能包含从一周到另一周的不同 POS 值。
不知道变量中将包含哪些值使得自动创建报告变得非常困难。
我的数据如下所示:
sample <- data.frame(DRUG = c("A","A","B"),POS = c("Hospital","Physician","Home"),GROSS_COST = c(50,100,60), NET_COST = c(45,80,40))
我需要更广泛地旋转这个数据框,以便每个 pos 按成本(总和净)有一列。
这可以使用 pivot_wider 轻松实现:
x <- sample %>% pivot_wider(names_from = POS, values_from = c(GROSS_COST,NET_COST))
目标 我希望能够将每个 POS 的列保持在一起,即 GROSS_COST_Hospital 和 NET_COST_Hospital 将并排,与所有其他 POS 列类似。
有没有一种优雅的方法来使用字符串匹配对列进行分组?
解决方案
我们可以在select
步骤上订购
library(dplyr)
library(tidyr)
library(stringr)
sample %>%
pivot_wider(names_from = POS, values_from = c(GROSS_COST,NET_COST)) %>%
select(DRUG, names(.)[-1][order(str_extract(names(.)[-1], '[^_]+$'))])
# A tibble: 2 x 7
# DRUG GROSS_COST_Home NET_COST_Home GROSS_COST_Hospital NET_COST_Hospital GROSS_COST_Physician NET_COST_Physician
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 A NA NA 50 45 100 80
#2 B 60 40 NA NA NA NA
推荐阅读
- bash - bash:如何组合 cd 和 ./?
- kotlin - 如何用间谍模拟构造函数?
- f# - 如何在 VisualStudio *.fsx 中格式化多行 F# 函数
- css - React Native:保持图标位置固定
- github - 推送 GitHub 时 Azure DevOps 运行 Pipeline 但忽略某些特定文件
- azure-devops - 当数据从devops导入excel时,Odata结果在某些列下显示用户ID值而不是用户名?
- firefox - Firefox 中的 WebM/VP9 支持
- reactjs - React-Firebase:为什么页面在第一次加载时失败,但在刷新时正确加载?
- python-3.x - 检查 Mongo DB 字段中是否存在 python 变量的条件。如果已经存在,则忽略否则推送到 DB
- javascript - 如何取消 CSS.escape() 转义的内容?