按R中的列重新组织和匹配数据集

时间:2019-01-15 19:47:28

标签: r loops merge

这是我的第一篇文章,因此请原谅任何错误。

我有两个要按样品名称合并的数据集,问题是第二个数据集在样品名称中具有额外的标签,并且与第一个数据集的顺序不同。

Clinical                                                                  
Patient, Cell Count                                                            
BB-01-D1    7
BB-02-D1    4
BB-04-D30   2

Flow                                                                      
Patient,          Cell Count                                                     
 2-5-19_BB-01-D1     7 
 3-15-19_BB-04-D30   2
 2-6-19_BB-02-D1     4

我想知道是否有一种方法可以组合和匹配“患者”列是否包含部分相同的名称,或者是否有一种方法可以摆脱“患者”列中所有行的多余标签所以我可以简单地重新排序。

谢谢。

1 个答案:

答案 0 :(得分:0)

有可能:

library(tidyverse)
df1<-read.table(text="Patient Cell Count                                                            
BB-01-D1    7
                BB-02-D1    4
                BB-04-D30   2",header=T,fill=T)
df1<-df1[,-ncol(df1)]
df2<-read.table(text="Patient,          Cell Count                                                     
 2-5-19_BB-01-D1     7 
                3-15-19_BB-04-D30   2
                2-6-19_BB-02-D1     4",header=T,fill=T)
df2<-df2[,-ncol(df2)]
df2<-df2 %>% 
  mutate(Patient.=str_remove_all(df2$Patient.,".*(?<=_)"))

然后按照您的意愿从这里进行

cbind(df1,df2) #Cell Count labels lost due to reading errors. Will work on 
                                    #my data import
     Patient Cell  Patient. Cell
1  BB-01-D1    7   BB-01-D1    7
2  BB-02-D1    4   BB-04-D30    2
3 BB-04-D30    2   BB-02-D1    4

或:

df1<-df1 %>% 
  mutate(Patient=as.factor(Patient))
df2<-df2 %>% 
  rename(Patient=Patient.) %>% 
  mutate(Patient=as.factor(Patient))
merged<-df1 %>% 
  left_join(df2,"Patient") 
names(merged)<-c("Patient","Clinical","Flow")

结果:

 Patient      Clinical Flow
1  BB-01-D1        7    7
2  BB-02-D1        4    4
3 BB-04-D30        2    2