我目前正在处理索赔数据。我无法判断该如何处理这个问题。下面是示例数据(claims_input):-
claims_input
CLAIM_ID MEM_NUMBER Year_Month PLACE_OF_SERVICE NET_PAYABLE
6343985 123456 2011-Jan CLINICS 55.65
6332945 123456 2011-Jan CLINICS 190.05
6303844 956096 2011-Apr CLINICS 115.00
6320409 984659 2011-Jan PHARMACY 92.00
4300650 095877 2011-Jan CLINICS 92.00
6034750 496500 2011-Feb PHARMACY 193.97
claims_output
CLAIM_ID MEM_NUMBER Year_Month Clinics Pharmacy
6343985 123456 2011-Jan 55.65 NA
6332945 123456 2011-Jan 190.05 NA
6303844 956096 2011-Apr 115.00 NA
6320409 984659 2011-Jan NA 92.00
4300650 095877 2011-Jan 92.00 NA
6034750 496500 2011-Feb NA 193.97
这里的重点是检查每个会员在特定日期为诊所和药房索赔的金额。
谢谢。期待一些真知灼见。
再试一次,给定编辑过的问题:
library(dplyr)
library(tidyr)
claims_output <- claims_input %>% group_by(CLAIM_ID) %>% spread(PLACE_OF_SERVICE,NET_PAYABLE)
claims_output
Source: local data frame [6 x 5]
CLAIM_ID MEM_NUMBER Year_Month CLINICS PHARMACY
1 4300650 95877 2011-Jan 92.00 NA
2 6034750 496500 2011-Feb NA 193.97
3 6303844 956096 2011-Apr 115.00 NA
4 6320409 984659 2011-Jan NA 92.00
5 6332945 123456 2011-Jan 190.05 NA
6 6343985 123456 2011-Jan 55.65 NA
请注意,MEM_NUMBER
095877
被减少到95877
,因为零左对齐。这应该不是问题,但可以修复。
data.table
方法,它假设您的数据命名为dt
。这里假设您的日期已经构造为年-月,否则您将希望创建一个年-月日期,以便您可以按该变量进行求和。
library(data.table)
# Collapse all charges by member, date, and place of service #
dt <- dt[,list('amount'=sum(amount)), by=c('member_no', 'date', 'place_of_service')]
# Reshape to wide #
dt.wide <- reshape(dt, idvar=c('member_no', 'date'), timevar='place_of_service', direction='wide')
# Rename per your example, correcting member_no #
setnames(dt.wide,c('member_no', 'date', 'clinic', 'pharmacy'))
现在很清楚了。你只需要tidyr
函数spread
:
library(tidyr)
spread(df, PLACE_OF_SERVICE, NET_PAYABLE)
CLAIM_ID MEM_NUMBER Year_Month CLINICS PHARMACY
1 4300650 95877 2011-Jan 92.00 NA
2 6034750 496500 2011-Feb NA 193.97
3 6303844 956096 2011-Apr 115.00 NA
4 6320409 984659 2011-Jan NA 92.00
5 6332945 123456 2011-Jan 190.05 NA
6 6343985 123456 2011-Jan 55.65 NA