如何用R语言整理数据集?

提到数据分析,首先会想到的可能是t检验、回归分析等各种具体的分析方法,但对于经历过完整数据分析的同学来说,最复杂、最耗费时间的步骤往往是数据的清理,也就是将数据整理成为能够进行上述统计分析的格式。

在实际数据分析过程中,原始数据因为各种因素,通常是不符合或者不满足我们分析与建模需求的。为配合进行更好的分析,可能涉及到以下数据处理工作:定义变量名;计算变量;转换变量,添加数据标签等。

接下来我们结合R语言自带MASS数据集birthwt实操数据集,分别通过SPSS与R语言软件开展数据集整理,方便大家对两种方法的特点有更加直观的认识!

R语言自带MASS数据集birthwt,是一份于1986年在在马萨诸塞州收集的与婴儿出生体重低相关的危险因素的数据。根据婴儿出生体重是否小于2.5kg,分为低出生组(59例)与正常组(130例)。研究的暴露因素见下表。

接下来,我们分别采用R语言软件和SPSS软件,对数据集进行整理,主要围绕下面四部分展开:

1.定义变量名;

2.计算变量;

3.转换变量;

4.添加数据标签

一、R语言进行数据整理

1.定义变量名

R语言使用reshape包的rename函数修改数据变量的名称。例如,使用rename函数自定义修改变量bwt的名称

(1)安装和加载R包

install.packages("reshape")

library(reshape)

(2)将变量bwt重命名为BWT

birthwt <- rename(birthwt, c(bwt="BWT"))

str(birthwt)

2.计算变量

例:原数据集中变量BWT单位为g,现通过计算,单位变为斤

birthwt$BWT1<-birthwt$BWT*0.001*2 #生成新变量BWT1

3.转换变量

(1)变量值转换

用cut函数对变量进行分组并为分组变量赋值。将变量ftv分为三组,分别为0次,1次和2次以上。

birthwt$ftv1<-cut(birthwt$ftv,breaks = c(0,1,2,Inf),

labels=c("0","1","2+"),right = F,include.lowest = T)

cut函数表达式:cut(x,breaks,labels,right,include.lowest)。

参数解读:x为待划分的数据;

breaks为划分依据(区间);

labels为划分的各组打标签;

right=T,区间左开右闭,right=F,则左闭右开;(开区间不包括端点(a,b),闭区间包括端点[a,b])

include.lowest=T,第一个区间包含左端点,最后一个区间包含右端点。

(2)转换为逻辑值

变量low、smoke、ptl、ht、ui为二分类数据,且结果为0=否,1=是。as.logical函数:as.logical(A)将A转换为一个逻辑值数组。A中的任意非零元素都将转换为逻辑值1(TRUE),零则转换为逻辑值0(FALSE)。

birthwt$low<-as.logical(birthwt$low)#将low变量转换为逻辑值

birthwt$smoke<-as.logical(birthwt$smoke)#将smoke变量转换为逻辑值

(3)转换为因子

birthwt$race<-factor(birthwt$race,levels=c(1,2,3))#将race变量转换为因子,levels对数据进行排序

varF <- c("low","race","smoke","ptl","ht","ui","ftv")#批量因子化

birthwt[varF] <- lapply(birthwt[varF], factor)

(4)转换为数值型

birthwt $age<-as.numeric(birthwt $age)

birthwt $lwt<-as.numeric(birthwt $lwt)

4.添加数据标签

为变量race添加数据标签,1=white;2=black;3=other

birthwt$race <- factor(birthwt $race,levels=c(1,2,3) ,

labels = c("white","black","other"))#levels对数据进行排序,第一位为对照,labels添加标签,与levels顺序对应

如果每次引用的时候都使用“数据框名$变量名”的形式会非常麻烦,尤其是当数据框名比较繁琐的时候。为了简化这个过程,使用 R 语言的 with 函数,我们可以一次性完成对 R语言表达式的操作以及调用该函数的过程,一起看一下吧!

函数with()的使用方式为:with(data, expr, ...)。其中参数data就是需要进行运算的数据集,参数expr就是需要做的运算等。这个函数的意思就是对指定的数据集做相应的运算。由于指定了对应的数据集,因此直接使用对应的变量名运算就可以,不需要在使用“数据框名$变量名”的形式。

birthwt1<- with(birthwt, { race <- factor(race,levels=c(1,2,3) ,

labels = c("white","black", "other"))#factor转换为因子,labels打标签

ptd <- factor(ptl > 0)#转换为因子,大于0为true

ftv <- factor(ftv)#转换为因子

levels(ftv)[-(1:2)] <- "2+"#1,2指的是位次,第三位及以上赋值为2+

bwt<-bwt*0.001*2#计算变量 

data.frame(low=(low>0),bwt, age, lwt, race, smoke = (smoke > 0),

ptd, ht = (ht > 0), ui = (ui > 0), ftv)#生成数据框

})

二、SPSS进行数据整理

首先,我想一般情况下,数据一开始的形式,经常是EXCEL的格式,基本格式如下:

l首行是变量名,一般是英文或者拼音,不建议用汉字。

l从第二行开始,每一行都代表着一个研究对象的所有变量信息。

l每一列都代表所有人一个变量的变量值

l一般建议,CSV和excel中的变量值,建议用数字表示,比如男性=1,女性=2;血型(1、2、3、4),这种做法比较灵活,而且可以保证数据集在各统计软件通行无阻。对于数据集赋值不清者,请列一份变量赋值表

l缺失值默认处理,一般是空白代替,不要写NA6.除非特殊字符串(比如姓名),数据库不要出现汉字或者英文字符串,会导致后续分析被卡。

关于数据整理的内容,和R语言一样,主要围绕下面四部分展开:

1.定义变量名

仅需在变量视图下名称一列双击修改即可。

2.计算变量

仅需在转换——计算变量中,输入要产生的新变量名BWT1,再输入计算公式即可。

3.转换变量

(1)变量值转换

在很多情况下,可以将定量数据转换为定性数据(二分类、多分类),有序数据转换成二分类。这是因为不同的数据,有不同的统计策略:

·定量数据——t检验

·转换为等级数据——秩和检验

·转换为二分类数据——卡方检验

这里更推荐“重新编码为不同变量”,会产生新变量,而不改变原有变量。

例:定量转换为有序多分类

变量值转换,将ftv转换为0次,1次和2+次。输入“标签”后一定要点击“变化量”。

仅需输入旧值和新值,再点添加,即可转换变量值。由于2+是字符型,所以要勾选输出变量是字符串。

(2)很多导入的数据都默认为“名义”,所谓名义就是无序分类数据。还有“标度”,为定量数据,“有序”为有序分类数据。如果需要修改,点击下拉菜单即可修改。

4.添加数据标签

对变量值打标签:上面说过,我们很多分类变量,其变量值一般也用1234构成,但是1234 如果意思不知道怎么办嘛?就需要在“值”这一列对分类变量值注释。

最后,诸位可能会从SPSS导出数据到R语言或其他平台进行数据分析,数据导出格式更加推荐csv形式,这种格式对缺失值处理以空白代替,而非NA代替

这里有个注意,导出的数据,可以以值标签的名义导出,也可以以原始值的名义导出。

一般情况下,都推荐原始数据值,方便后续对数据集进行修改。除非,你在SPSS数据库已经完全整理好了你的变量值,尤其是分类变量值,并做好了分类。

通过以上内容,不知道诸位是否和我一样,R语言对新手小白来说真的太难太难了,相比而言,SPSS软件操作上容易上手,简单易学,大部分功能都是可视化呈现的,操作的话点击鼠标就可以完成。建议大家有能力的用R语言来进行数据整理,实在不行也不要勉强,SPSS也很不错!

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值