我正在尝试合并两个具有不同行数的数据帧。我只是想显示两个数据帧的头部和尾部,因为它们都有超过一百行。两个数据帧都属于miRNA表达分析,两者都显示如下。两个数据帧仅相差2行。
数据框1(miRNAs_256c)
miRNA read_count precursor total seq X256c_norm
1 dre-miR-21 13309 dre-mir-21-2 13309 13309 550709,65
2 dre-miR-181a-5p 1004 dre-mir-181a-1 1004 1004 41544,25
3 dre-miR-181a-5p 927 dre-mir-181a-2 927 927 38358,09
4 dre-miR-181c 592 dre-mir-181c 592 592 24496,21
5 dre-miR-181b 579 dre-mir-181b-2 579 579 23958,29
6 dre-miR-181b 561 dre-mir-181b-1 561 561 23213,47
160 dre-miR-7149-5p 0 dre-mir-7149 0 0 0
161 dre-miR-723-5p 0 dre-mir-723 0 0 0
162 dre-miR-727-5p 0 dre-mir-727 0 0 0
163 dre-miR-730 0 dre-mir-730 0 0 0
164 dre-miR-735 0 dre-mir-735 0 0 0
165 dre-miR-740 0 dre-mir-740 0 0 0
数据框2(miRNAs_shield)
miRNA read_count precursor total seq shield_norm
1 dre-let-7a 424 dre-let-7a-1 424 424 72939,96
2 dre-let-7a 397 dre-let-7a-6 397 397 68295,2
3 dre-let-7a 371 dre-let-7a-5 371 371 63822,47
4 dre-let-7a 367 dre-let-7a-3 367 367 63134,35
5 dre-miR-21 345 dre-mir-21-2 345 345 59349,73
6 dre-let-7a 343 dre-let-7a-2 343 343 59005,68
162 dre-miR-723-5p 0 dre-mir-723 0 0 0
163 dre-miR-727-5p 0 dre-mir-727 0 0 0
164 dre-miR-730 0 dre-mir-730 0 0 0
165 dre-miR-731 0 dre-mir-731 0 0 0
166 dre-miR-735 0 dre-mir-735 0 0 0
167 dre-miR-740 0 dre-mir-740 0 0 0
我需要合并两者,只保留列的标题,并且我想保留那些读取计数为0的那些。
我尝试了几种方法但没有任何工作正如我所期待的那样。首先我尝试了cbind
,但由于行号不同而出错。
prueba <- cbind (miRNAs_256c, miRNAs_shield)
其次,我尝试了markheckmann在http://ryouready.wordpress.com/2009/01/23/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/
中提出的代码myList <- list (miRNAs_256c, miRNAs_shield)
dat <- data.frame ()
for(i in seq(along=myList))for(j in names(myList[[i]]))dat[i,j] <- myList[[i]][j]
dat
此代码在cbind
没有错误的情况下运行,但我只能捕获两行。
第三,我尝试了函数merge
并且似乎工作但我只能捕获34行,而我的数据帧有更多。
dat <- merge (miRNAs_256c, miRNAs_shield, ALL=TRUE)
之后,我尝试了来自join
的{{1}}函数以及参数plyr
的所有值
type
这会合并两个数据帧,但它不会将两者合并,而只是在第一个数据帧的末尾添加第二个数据帧。
dat_join <- join(miRNAs_256c, miRNAs_shield, type = "full")
此变体能够连接两个数据帧,但只能连接miRNAs_256c中的所有行,添加miRNAs_shield的匹配列
dat_join <- join(miRNAs_256c, miRNAs_shield, type = "left")
中的其他值与type
或inner
相同。
我已经尝试了上面列出的所有可能性,我已经在网上寻求帮助,即使在堆栈溢出,但我无法得到帮助。我不可能将两个数据帧中的所有信息都只存储在一个数据帧中。有人可以提供一些有用的帮助或建议,在哪里可以找到更多的帮助。我已经耗尽了我所知道的所有可能性。
答案 0 :(得分:1)
我认为你想要进行合并以及你的data.frame
是如何相似的有点不清楚。可以在data.frame
s中找到相同的miR吗?
无论如何,我首先阅读您提供的数据:
df1 <- read.table(text = "
miRNA read_count precursor total seq X256c_norm
1 dre-miR-21 13309 dre-mir-21-2 13309 13309 550709,65
2 dre-miR-181a-5p 1004 dre-mir-181a-1 1004 1004 41544,25
3 dre-miR-181a-5p 927 dre-mir-181a-2 927 927 38358,09
4 dre-miR-181c 592 dre-mir-181c 592 592 24496,21
5 dre-miR-181b 579 dre-mir-181b-2 579 579 23958,29
6 dre-miR-181b 561 dre-mir-181b-1 561 561 23213,47
160 dre-miR-7149-5p 0 dre-mir-7149 0 0 0
161 dre-miR-723-5p 0 dre-mir-723 0 0 0
162 dre-miR-727-5p 0 dre-mir-727 0 0 0
163 dre-miR-730 0 dre-mir-730 0 0 0
164 dre-miR-735 0 dre-mir-735 0 0 0
165 dre-miR-740 0 dre-mir-740 0 0 0")
和
df2 <- read.table(text = "
miRNA read_count precursor total seq shield_norm
1 dre-let-7a 424 dre-let-7a-1 424 424 72939,96
2 dre-let-7a 397 dre-let-7a-6 397 397 68295,2
3 dre-let-7a 371 dre-let-7a-5 371 371 63822,47
4 dre-let-7a 367 dre-let-7a-3 367 367 63134,35
5 dre-miR-21 345 dre-mir-21-2 345 345 59349,73
6 dre-let-7a 343 dre-let-7a-2 343 343 59005,68
162 dre-miR-723-5p 0 dre-mir-723 0 0 0
163 dre-miR-727-5p 0 dre-mir-727 0 0 0
164 dre-miR-730 0 dre-mir-730 0 0 0
165 dre-miR-731 0 dre-mir-731 0 0 0
166 dre-miR-735 0 dre-mir-735 0 0 0
167 dre-miR-740 0 dre-mir-740 0 0 0")
然后我们可以对指定的列进行合并。以下是否符合您的要求?
merge(df1, df2,
by = c("miRNA", "read_count", "precursor", "total", "seq"),
all = TRUE)
# miRNA read_count precursor total seq X256c_norm shield_norm
#1 dre-miR-181a-5p 927 dre-mir-181a-2 927 927 38358,09 <NA>
#2 dre-miR-181a-5p 1004 dre-mir-181a-1 1004 1004 41544,25 <NA>
#3 dre-miR-181b 561 dre-mir-181b-1 561 561 23213,47 <NA>
#4 dre-miR-181b 579 dre-mir-181b-2 579 579 23958,29 <NA>
#5 dre-miR-181c 592 dre-mir-181c 592 592 24496,21 <NA>
#6 dre-miR-21 345 dre-mir-21-2 345 345 <NA> 59349,73
#7 dre-miR-21 13309 dre-mir-21-2 13309 13309 550709,65 <NA>
#8 dre-miR-7149-5p 0 dre-mir-7149 0 0 0 <NA>
#9 dre-miR-723-5p 0 dre-mir-723 0 0 0 0
#10 dre-miR-727-5p 0 dre-mir-727 0 0 0 0
#11 dre-miR-730 0 dre-mir-730 0 0 0 0
#12 dre-miR-735 0 dre-mir-735 0 0 0 0
#13 dre-miR-740 0 dre-mir-740 0 0 0 0
#14 dre-let-7a 343 dre-let-7a-2 343 343 <NA> 59005,68
#15 dre-let-7a 367 dre-let-7a-3 367 367 <NA> 63134,35
#16 dre-let-7a 371 dre-let-7a-5 371 371 <NA> 63822,47
#17 dre-let-7a 397 dre-let-7a-6 397 397 <NA> 68295,2
#18 dre-let-7a 424 dre-let-7a-1 424 424 <NA> 72939,96
#19 dre-miR-731 0 dre-mir-731 0 0 <NA> 0
如您所见,这两个data.frame
合并为一个,结果中出现了不同的列shield_norm
和X256c_norm
。当信息不可用时,将填充<NA>
。正如您所看到的dre-miR-727-5p
和df1
中存在df2
(第10行),因此shield_norm
和X256c_norm
中的信息都已填充。
如果这不是您想要的,请您详细说明您的预期输出应该是什么?
编辑。这实际上相当于您(几乎)自己尝试过的内容。但是我可以看到,你用大写写ALL
。该参数应该是小写的,因为R区分大小写,所以也许这就是为什么你在reslut中只有34行。