我正在处理以下格式的索赔数据:-

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_numberyear_month上使用联接,只需使用on=c("mem_number", "year_month")。我认为您显示的示例没有必要。

10-04 12:44