数据争用 R 中的索赔数据以查找每个成员相对于特定日期的总成本
Data wrangling Claims Data in R to find the total cost per member with respect to particular date
我目前正在处理索赔数据。我无法判断如何解决这个问题。以下是样本数据(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
这里的重点是检查每个成员在特定日期为诊所和药房索赔的金额是多少。
谢谢。期待一些见解。
现在清楚了。您只需要 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
再试一次,给定编辑后的问题:
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'))
我目前正在处理索赔数据。我无法判断如何解决这个问题。以下是样本数据(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
这里的重点是检查每个成员在特定日期为诊所和药房索赔的金额是多少。
谢谢。期待一些见解。
现在清楚了。您只需要 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
再试一次,给定编辑后的问题:
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'))