问题描述
我想用患者信息重新整理表格。我已经尝试了 base R 的 xtabs
和 reshape2 的 acast
,但没有得到结果。我的桌子看起来像这样:
var1 | id | 数量 | 价格 |
---|---|---|---|
患者姓名 1 | 0021 | 7.0 | 167.3 |
药物 | 不适用 | 3.0 | 15.8 |
医疗产品 | 不适用 | 1.0 | 150.0 |
解决方案 | 不适用 | 3.0 | 4.5 |
患者姓名 2 | 0154 | 11.0 | 792.0 |
药物 | 不适用 | 7.0 | 37.4 |
手术材料 | 不适用 | 4.0 | 754.6 |
正如您所看到的,有些患者可能进行了手术,有些则没有,在这种情况下,甚至没有在患者的姓名下提及它。 id 0021 和 0154 旁边的数字是总数量和总价格耐心,新表中不需要此信息。我认为稍后可以轻松计算总数。决赛桌应如下所示:
因此,该函数必须用 0 填充遗漏的变量,并且必须是垂直的。
解决方法
您可以fill
id
值并以宽格式获取数据。
library(dplyr)
library(tidyr)
df %>%
fill(id) %>%
pivot_wider(names_from = var1,values_from = c(quantity,price),values_fill = 0)
,
library(dplyr)
library(tidyr)
df %>%
fill(id) %>%
filter(var1 %in% c("Drugs","Medical products","Solutions","Surgical materials")) %>%
pivot_wider(names_from = var1,values_from = c(price,quantity),names_glue = "{var1} {.value}",values_fill = 0) %>%
mutate(id = sprintf("%04d",id))
这给了我们:
# A tibble: 2 x 9
id `Drugs price` `Medical products p~ `Solutions price` `Surgical materials ~ `Drugs quantity` `Medical products q~ `Solutions quant~ `Surgical materials ~
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0021 15.8 150 4.5 0 3 1 3 0
2 0154 37.4 0 0 755. 7 0 0 4