R语言数据清理:将原始数据集第一行的分类名称变成列

一个很常见但是很难找到有具体步骤的解决方法的问题。。

以下是个人做法,不一定最高效最简单,欢迎讨论。

适用情况:

当excel表格的第一列有分类名称,导致dataframe不能被直接使用时,如何把p1转换成p2?


p1



第一步:去除第一行分类名

代码:

names(dat) <- as.matrix(dat[1, ])

dat <- dat[-1, ]

dat[] <- lapply(dat, function(x) type.convert(as.character(x)))

此部分代码原帖地址:https://stackoverflow.com/questions/23209330/how-to-change-the-first-row-to-be-the-header-in-r


这一步之后,原本的'soft corals'这一行被去掉了,dataframe变成了常见的样子:


p3

接下来要做的就是把这个分类名称做成一个attribute column放入dataframe。

现在的df里面所有不同种类的corals全部放在了一起,导致无法全部用一列的attribute去正确的分类。

所以我接下来把它们按种类放进不同的dataframe。因为种类这行已经统一删了,所以我是手动根据年份放的。

为了方便merge,做了如下这样一个root df,每一个分出来的coral df都会跟它拼在一起。

代码:

rootdf <- dat[c(1:8),c(1:3)]

分出小的coral df的代码跟它类似。

接下来要分别跟每一个小的coral df加上相对的分类attribute。

代码:

bc <-c('blue corals','blue corals','blue corals', 'blue corals', 'blue corals','blue corals','blue corals','blue corals' )

bcdf$coral <- bc

这里'coral'是我新的attribute的名字,‘bcdf’是小的coral df的名字。

对每一个分类都做完添加相应的attribute以后,把它们分别和root df merge起来。

横向合并代码:

sc1<-merge(rootdf,scdf,by="id")

每个都横向合并完就可以全部纵向合并变成一个大的、包括了全部信息的、有coral type attribute的数据集,长下图这个样子。


有了这些columns完全一样的小数据集后,就可以把它们全部纵向合并汇集到一个大数据集里面。

纵向合并的代码:

total<-rbind(sc1,sf1)

total<-rbind(total,bc1)

其中sc1,sf1,bc1,都是添加分类后的数据集的名字。

此时数据集长这样:



到这里,coral的分类已经全部清理完毕。当然目前这个数据集还没有达到最适合的状态,年份也应该被分成attribute,这篇先不具体说明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。