首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据唯一ID对数据进行分组,然后将其粘贴到同一行

根据唯一ID对数据进行分组,然后将其粘贴到同一行
EN

Stack Overflow用户
提问于 2019-05-30 05:36:13
回答 2查看 41关注 0票数 0

我有我的数据的子集:

代码语言:javascript
复制
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?

预期结果:

代码语言:javascript
复制
10034  Wayne, Bruce  78582  1  151.9    Stomach, unspecified   NA


10034  Wayne, Bruce  87758  1  V70-V82  Tummy AChe 2  285.9    Anemia, unspecified
EN

回答 2

Stack Overflow用户

发布于 2019-05-30 07:58:23

演示文稿与您想要的稍有不同,但请看它是否适合您。

tidyverse解决方案:

代码语言:javascript
复制
# 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
票数 0
EN

Stack Overflow用户

发布于 2019-05-30 07:58:49

我不确定您想要的输出,但我认为这个脚本可能会有所帮助。它使用data.table包:

代码语言:javascript
复制
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)]

输出类似于您的请求:

代码语言:javascript
复制
> 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

希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档