R 比较拆分和合并两个数据帧
如何通过基因名称比较两个数据集df1和df2,并从df2中提取每个基因名称的对应值并将其插入df1中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 <-
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
fromdplyr
(或其他软件包,如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 })