我正在处理以下格式的索赔数据:-
claim mem_number year_month label
1 123 2011-Jan Clinic
2 123 2011-Jan Lab
3 123 2011-Jan Office
4 234 2011-Jan office
5 234 2012-Feb Lab
我想按mem_number和year_month分组,并将所有这些标签隐蔽到诊所,即使该组中的一个标签是诊所。输出应为:-
Claim mem_number year_month label
1 123 2011-Jan Clinic
2 123 2011-Jan Clinic
3 123 2011-Jan Clinic
4 234 2011-Jan Office
5 234 2012-Feb Lab
我对这个问题的解决方法是:
library("dplyr")
output<-input %>% group_by(mem_number,year_month) %>%
mutate(label=if(any(label=="Clinic","Clinic",NA)))
它给了我错误。我想知道我的错误以及如何解决。
最佳答案
使用data.table
,我会这样:
require(data.table) # v1.9.6+
dt[dt[label == "Clinic"], label := "Clinic", on="mem_number"]
我们将那些行提取到
label == "Clinic"
。这使我们可以使用与那些行相对应的mem_number
。然后,我们对这些返回到dt
的行执行联接,对于每个匹配的行,我们使用值label
更新"Clinic"
。正如@Frank指出的那样,如果您希望在
mem_number
和year_month
上使用联接,只需使用on=c("mem_number", "year_month")
。我认为您显示的示例没有必要。