我有我的数据的子集:
a3 <- structure(list(Employee.Number = c("10034", "10034", "10034"),
Employee.Full.Name = c("Wayne, Bruce", "Wayne, Bruce",
"Wayne, Bruce"), Case.No = c("78582", "87758", "87758"),
Diagnoses.No = c("1", "2", "1"), Diagnosis.Medical.Code.Code = c("151.9",
"285.9", "V70-V82"), Diagnosis.Medical.Code.Description = c("Stomach, unspecified",
"Anemia, unspecified", "Tummy AChe"
)), row.names = c(NA, -3L), class = "data.frame")
我该如何对Case.No进行分组呢?如果" Diagnoses.No“等于2(实际数据的数字大于2),那么最后3列将被粘贴到同一个Case.no的列上,而删除了原始列的Diagnoses.No为1?
预期结果:
10034 Wayne, Bruce 78582 1 151.9 Stomach, unspecified NA
10034 Wayne, Bruce 87758 1 V70-V82 Tummy AChe 2 285.9 Anemia, unspecified
发布于 2019-05-30 07:58:23
演示文稿与您想要的稍有不同,但请看它是否适合您。
tidyverse
解决方案:
# function to concartinate columns
cat_function <- function(df){
map_df(df, ~paste(unlist(.), collapse = " / "))
}
a3 %>%
group_by(Employee.Number, Employee.Full.Name, Case.No) %>%
nest %>%
transmute(Employee.Number, Employee.Full.Name, Case.No,
res = map(data, cat_function)) %>%
unnest
发布于 2019-05-30 07:58:49
我不确定您想要的输出,但我认为这个脚本可能会有所帮助。它使用data.table包:
library(data.table)
a3<-data.table(a3)
a2 <-a3[Diagnoses.No==2,list(Employee.Number,Employee.Full.Name,Case.No,
x=paste0(Diagnoses.No, ' ', Diagnosis.Medical.Code.Code), Diagnosis.Medical.Code.Description),]
a1 <-a3[Diagnoses.No==1,]
a3 <- merge(a1,a2, by=c('Employee.Number','Employee.Full.Name','Case.No'), all.x=T)
a3 <- a3[,list(Employee.Number,Employee.Full.Name,Case.No,Diagnosis.Medical.Code.Code,
Diagnosis.Medical.Code.Description.x= paste0(Diagnosis.Medical.Code.Description.x,' ',x),
Diagnosis.Medical.Code.Description.y)]
输出类似于您的请求:
> a3
Employee.Number Employee.Full.Name Case.No Diagnosis.Medical.Code.Code Diagnosis.Medical.Code.Description.x Diagnosis.Medical.Code.Description.y
1: 10034 Wayne, Bruce 78582 151.9 Stomach, unspecified NA <NA>
2: 10034 Wayne, Bruce 87758 V70-V82 Tummy AChe 2 285.9 Anemia, unspecified
希望它能帮上忙!
https://stackoverflow.com/questions/56368858
复制相似问题