R语言循环中数据框的合并,顺序排列

Python014

R语言循环中数据框的合并,顺序排列,第1张

画热图中耽误时间较久的部分

https://www.jianshu.com/p/db53f7463d3f?open_source=weibo_search

如下三个数据

创建一个空list,利用get()将所有数据框写入,形成一个2维的list,然后利用do.call()进行合并

实际中,我用for(i in length(vector)) {} 结果都只有最后一次循环的结果。 改成for(i in c(1:7))) {}

https://www.jianshu.com/p/fd60374d9577?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends

数据框就是向量按列组合

语句很简单,只有一句

d1 <- do.call(cbind, lapply(lapply(d, unlist), length<- , max(lengths(d))))

lapply(x,fun),lapply接收两个值,x为向量或列表,fun是方法,这个函数的意思是将fun方法作用到x的每个元素,返回一个与x相同长度的列表

unlist函数接收一个列表,unlist将其简化为一个包含列表中所有原子成分的向量

外面嵌套的那层lapply函数,是将每个向量元素的长度设定为最长的那个长度,缺失值用NA补齐

cbind是按列合并向量,如果两列数量不一样会自动重复短的那列

do.call函数与lapply函数功能类似,但有一点不一样

lapply()为列表中的每个元素应用一个给定的函数,所以会有几个函数调用。

do.call()将给定的函数作为一个整体应用于列表,所以只有一个函数调用。

详细差别见 http://www.dovov.com/rlapplydo-call.html

这位童鞋你好,可以通过调用到cbind或rbind()函数,将两个matrix或dataframe给合并到一起;其中rbind()为按照行合并,要求二者必须有相同列数,自动往行下面顺延数据;cbind()则是按列合并,必须有相同行数。