笔者最近在进行数据分析时有一个需求:需要将一个Excel文件按照列名的不同拆分为多个文件并按照列名进行保存,初次接触时没有头绪,但是等真正解决时有一种蓦然回首,那人却在灯火阑珊处之感,R语言的学习注重灵活变通,特记录心路历程与各位分享,

首先来看拿到这组数据,需要按照outcome的列名不同将数据保存为Paresthesia.csv和Dry mouth.csv两个文件,假如数据量少,我们一般

在Excel进行筛选(保证列名存在,直接复制时第二组数据需要手动添加列名),然后复制每组数据进行新建就可以实现。但是当数据量大时,这种方法就是一种最笨的方法,耗时耗力。


R语言怎么样分割数据框中的内容 r语言数据拆分_r语言提取列名


因此笔者以"将excel按照某一列拆分成多个文件"

进行了搜索,结果发现在Excel中利用VBA代码就可以实现,

R语言怎么样分割数据框中的内容 r语言数据拆分_excel去重_02

但是这种方法看都看不懂,

那么有没有利用R语言可以实现的方法呢?

在网上看到这篇教程才有一种恍然大悟之感。接下来做一个简要的分享。

R语言怎么样分割数据框中的内容 r语言数据拆分_excel去重筛选_03

其实实现这个的操作很简单,主要分为两步,第一步是按照列名筛选数据,第二步是将符合列名的数据进行保存,这也跟我们在Excel中的操作思路是一样的。

第一步,如何去识别列名呢?我们需要用到一个函数unique,这也是我在最开始没有考虑到的(学的太少)。那如何将符合列名的数据进行保存呢?这里也分为两步,第一步是按照列名构建数据,我们需要用到subset函数,即在数据集中按照列名提取子集,第二步是将子集按照列名进行保存,我们需要用到write.csv.因此最终我们可以通过这样的命令实现:  

library(readxl) # 加载程序包读取excel数据dtres 7]) # 将列名去重,即将列名保存为res变量,7是列名的列数for (i in c(1:nrow(res[,1]))){ # 撰写循环,每一个列名运行一次  dt1 7]==as.character(res[i,1]))# 按照列名不同提取数据  cfilename = paste(res[i,1],”.csv”,sep = “”) # 构建保存的文件名以及格式  write.csv(dt1[,1:7],cfilename) # 保存数据}