R语言基本数据管理

创建新变量

在平时的项目之中,对于已有的数据,可能需要对现有的变量进行转换或常见新变量。

下面介绍3中创建新变量的方法:

有数据框

mydata <- data.frame(x1=c(1,4,5,3),x2=c(5,6,2,4))
需要增加两个新的变量sumx(x1和x2之和),meanx(x1和x2的平均值)。

方法一

mydata$sumx <- mydata$x1+mydata$x2
mydata$meanx <- (mydata$x1+mydata$x2)/2
方法二

> attach(mydata)
> mydata$sumx <- x1+x2
> mydata$smeanx <- (x1+x2)/2
> detach(mydata)
方法三
mydata <- transform(mydata,sumxx=x1+x2,meanx=(x1+x2)/2)

推荐使用方法三,简洁明了

三种方法的最终结果都一样:


变量的重编码

在数据的处理的时候,有时需要对变量的现有值进创建新值,例如:

>将连续变量转换成分段的值

>将误编码的值替换为正确的值

>将一组年龄分为年轻,中年,年长

......

语句variable[condition] <- expression  condition为真的时候才执行赋值。

eg:

leadership$agecat[leadership$age > 75] <- "Elder" #该语句将数据框中的age变量大于75的编码为Elder,新的变量名称叫agecat

变量的重命名

三种方法

1. fix()函数,fix(dataframe)

2.rename()函数,需要先安装reshape包

  使用:rename(dataframe,c(oldname="newname",...))

3. names()函数

namespace(dataframe)[n] <- "newname"   #n为需修改名称的变量所在列位置


缺失值

R语言中NA表示缺失值,NaN表示非数值(例如被0除的数)

is.na()函数用来检测是否存在缺失值

重编码缺失值

格式:variable[condition] <- expression condition为真时,执行赋值

在分析中排除缺失值

使用参数na.rm=TRU

eg:x <- c(1,2,NA)

        y<-sum(x)      #则y为NA

        z <- sum(x,na.rm=TRUE)  则z值为3

函数na.omit()可以删除所有含有缺失值的行。

不同函数处理不完整数据可能有不同的方法,具体查看每个函数

日期值

as.Date()函数

as.Date(x,"input_format")  # input_format表示日期的输入格式

日期格式
符号含义示例
%d数字日期01~31
%a缩写星期名周一
%A非缩写星期名星期一
%m月份00~12
%b缩写的月份11月
%B非缩写的月份十一月
%y两位数的年份15
%Y四位数的年份2015

函数Sys.date()返回当天的时间,只有年月日

函数date()返回当天的时间,年月日时分秒星期

时间间隔的计算:(1)两个日期直接相减(2)使用函数difftime() 。格式为difftime(date1,date2,units="years/weeks/days...")

常用类型转换函数

类型转换函数
判断转换
is.numeric()as.numeric()
is.character()as.character()
is.vector()as.vector()
ix.matrix()as.matrix()
is.data.frame()as.data.frame()
is.factor()as.factor()
is.logical()as.logical()

数据的排序

使用order()函数进行数据排序,默认为升序,在变量名前加减号表示降序。

eg:数据框leadership按age的降序排列。newdata <- leadership[order(leadership$age)]


数据集的合并

(1)增加列,使用merge()函数,一般两个数据框有至少一个相同的列,通过这些列进行合并

eg: total <- merge(dataframeA,dataframeB,by="ID")                       # 按照单列合并

或total <- merge(dataframeA,dataframeB,by=c("ID","country"))     #按照多列合并

cbind()函数

若两个数据框没有共同的列,合并两个数据框使用cbind()函数,但两个对象必须有相同的行数。

(2)添加行(追加)。

rbind()函数

eg: total <- rbind(dataframeA,dataframeB)

要力求两个数据框必须有相同的变量。若数据框A中有B中没有的变量,则

a. 删除数据框A中多于的变量

b. 在数据框B中追加变量并将其设为NA


选取数据子集

(leadership为举例数据框)

 (1) 选择部分变量(列)

法1:newdata <- leadership[,c(6:10)]或者newdata <- leadership[,6:10]

法2:myvars <- c("q1","q2","q3","q4")  #  q1,2,3,4表示要提取的变量名

          newdata <- leadership[myvars]

(2)删除部分变量(列)

          myvars <- names(leadership)%in%c("q1","q2","q3","q4")  #  q1,2,3,4表示要提取的变量名

          newdata <- leadership[!myvars]

(3)选择或删除行

         newdata <- leadership[1:3,]  # 选取1到3行

        newdata <- leadersgip[which(leadership$gender =="M" & leadership$age >30),] #按条件选取行,“,”不能忘。

利用subset()函数选取子集

newdata <- subset(leadership,age>35|age<24,select=c(q1,q2,q3,q4))

数据的随机抽样

sample()函数

sample(x, size, replace = FALSE, prob = NULL)
其中  x 为向量,要抽取的数据集的范围,size为整数,要抽取的个数,replace表示物防会抽样,prob表示为获取的数据分配的权值向量


使用sql操作数据框

需安装sqldf包

eg: a <- sqldf("select * from mtcars order by mpg",row.name=TRUE)  # row.name=TRUE表示将原始数据框的变量名用到新的数据框中,sql语句的写法同往常的一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值