R 比较拆分和合并两个数据帧

R 比较拆分和合并两个数据帧,r,R,如何通过基因名称比较两个数据集df1和df2,并从df2中提取每个基因名称的对应值并将其插入df1中 df1 <- Genes sample.ID chrom loc.start loc.end num.mark Klri2 LO.WGS 1 3010000 173490000 8430 Rrs1 LO.WGS 1 3010000 173490000 8430 Serpin LO.WGS 1

如何通过基因名称比较两个数据集df1和df2,并从df2中提取每个基因名称的对应值并将其插入df1中

df1 <-

Genes    sample.ID  chrom   loc.start   loc.end num.mark
Klri2     LO.WGS      1   3010000 173490000     8430
Rrs1      LO.WGS      1   3010000 173490000     8430
Serpin    LO.WGS      1   3010000 173490000     8430
Myoc      LO.WGS          1   3010000 173490000     8430
St18      LO.WGS          1   3010000 173490000     8430


df2 <-

    RL  pValue.   chr   start            end    CNA     Genes
    2   2.594433   1    129740006   129780779   gain    Klri2   
    2   3.941399   1    130080653   130380997   gain    Serpin,St18,Myoc

df3<-

Genes   sample.ID  chrom  loc.start  loc.end num.mark   RL  pValue      CNA
Klri2    LO.WGS     1   3010000   173490000     8430    2   2.594433    gain
Rrs1     LO.WGS     1   3010000   173490000     8430    0     0          0
Serpin   LO.WGS     1   3010000   173490000     8430    2   3.941399    gain
Myoc     LO.WGS     1   3010000   173490000     8430    2   3.941399    gain
St18     LO.WGS     1   3010000   173490000     8430    2   3.941399    gain

df1这是一个合并操作,但首先您必须以正确的格式提供
df2
,它将为每个基因包含一行(而不是为多个基因使用逗号分隔的单个条目)。从
tidyr
unnest()

现在,您只需使用
merge(df1,df2,all.x=TRUE)
left\u join
from
dplyr
(或其他软件包,如
data.table
,具体取决于您想学习的软件包)。请注意,这将引入
NA
s,其中您希望有零,但可以轻松替换这些零。

您可以尝试:

library(splitstackshape)   
out <- cSplit(df2, "Genes", sep = ",", "long")
然后您只需使用
dplyr中的
merge()
left\u join()

library(dplyr)
df3 <- left_join(df1, out)
或者,如果您更喜欢子集:

df3 <- left_join(df1, out) %>% (function(x) { x[is.na(x)] <- 0; x })

df3%(函数(x){x[is.na(x)]这里是对dplyr的一个很好的介绍。它是一个用于合并和选择R中特定列的软件包。它非常有用,值得一读。比这个特定问题更有价值。如果它仍然没有帮助,那么回来问一些特定的问题,参考您尝试的内容和得到的结果。
#   RL  pValue. chr     start       end  CNA  Genes
#1:  2 2.594433   1 129740006 129780779 gain  Klri2
#2:  2 3.941399   1 130080653 130380997 gain Serpin
#3:  2 3.941399   1 130080653 130380997 gain   St18
#4:  2 3.941399   1 130080653 130380997 gain   Myoc
library(dplyr)
df3 <- left_join(df1, out)
df3 <- left_join(df1, out) %>% mutate_each(funs(ifelse(is.na(.), 0, .)))
df3 <- left_join(df1, out) %>% (function(x) { x[is.na(x)] <- 0; x })