一、创建新变量
1.1运算符
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
^或** | 求幂 |
x%%y | 求余(x mod y)。 例:5%%2的结果为1 |
x%/%y | 整数除法。 例:5%/%2的结果为2 |
1.2创建新变量
方法一
#创建名为mydata的数据框
mydata<-data.frame(x1=c(2,2,6,4),
x2=c(3,4,5,6))
#将x1和x2进行求和与求平均
mydata$sum<-mydata$x1+mydata$x2
mydata$mean<-(mydata$x1+mydata$x2)/2
方法二
#载入数据框
attach(mydata)
#进行求和、求平均
mydata$sum<-x1+x2
mydata$mean<-(x1+x2)/2
#关闭数据框
detach(mydata)
方法三(使用transform函数)
mydata<-transform(mydata,
sumx=x1+x2
meanx=(x1+x2)/2)
二、变量的重编码
适用范围
- 修改变量
- 替换变量
......
2.1逻辑运算符介绍
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 严格等于* |
!= | 不等于 |
x|y | x或y |
x&y | x和y |
!x | 非x |
isTRUE(x) | 测试x是否为TRUE |
2.2设置缺失值
以名为leadership的数据框为例
#创建名为leadership的数据框
manager<-c(1,2,3,4,5)
data<-c("10/24/08","1-/28/08","1-/1/08","10/12/08","5/1/09")
contry<-c("US","US","UK","UK","UK")
gender<-c("M","F","F","M","F")
age<-c(32,45,25,39,99)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)
leadership<-data.frame(manager,data,contry,gender,age,
q1,q2,q3,q4,q5,stringsAsFactors=FALSE)
设置缺失值
leadership$age[leadership$age==99]<-NA
2.3将连续变量修改为一组类别值
如将75岁以上的人群设置为“Elder”
leadership$agecat[leadership>75]<-"Elder"
leadership$agecat[leadership$age>=55&leadership$age<=75]<-"Milddle Aged"
leadership$agecat[leadership$age<55]<-"Young"
2.4使用within()函数
使用within()函数简化代码(同时设置缺失值,修改连续变量为一组类别值)
leadership<-within(leadership,{
agecat<-NA
agecat[age>75]<-"Elder"
agecat[age<=55&age<=75<-"Middle Aged"
agecat[age<55<-"Young")}
within()函数与with()函数类似,但前者可修改数据框
三、变量的重命名
3.1使用fix()函数调用编辑器修改
使用该函数可调用编辑器,单机变量名即可重命名
3.2使用rename()函数修改
#安装reshape包
install.packages("reshape")
library(reshape)
#重命名
#格式为rename(dataframe,c(oldname="newname",oldname="newname",..))
leadership<-rename(leadership,
c(manager="manager ID",date="testDate")
)
3.3使用names()函数重命名变量
#查看变量名
names(leadership)
#修改变量名
names(leadership)[2]<-"testDate"
#批量修改变量名
names(leadership)[6:10]<-c("item1","item2","item3","item4","item5")
四、缺失值
4.1识别缺失值is.na()函数
如果某个元素是缺失值,相应的位置将别改写为TRUE,否则为FALSE
4.2设置缺失值
详见2.2
4.3排除缺失值
计算时若不排除缺失值,则计算结果也会变为缺失值。意即含有缺失值的算术表达式和函数的计算结果也是缺失值。
使用na.rm=TRUE排除计算时的缺失值
tips:在使用函数处理不完整的数据时,可使用help(sum)检查这些函数如何处理缺失数据
x<-c(1,2,NA,3)
y<-sum(x,na.rm=TRUE)
y
使用na.omit()删除不完整的观测
五、日期值
5.1以数值形式读取字符串日期值
日期值常以字符串的形式输入,然后转化为以数值形式储存的日期变量。
用as.Date()函数可完成该转化
as.Date()相当于告诉R,“鸽们,这是一个日期!看好了!不是字符~”
as.Date(x,"input_format")
#日期值的默认输入格式为yyyy-mm-dd
mydates<-as.Date(c("2007-06-22","2004-05-25"))
#其他类型的字符型数据
strdates<-c("01/05/1965")
dates<-as.Date(strdates,"%m/%d/%Y")
符号 | 含义 | 示例 |
%d | 数字表示的日期(0-31) | 01-31 |
%a | 缩写的星期名 | Mon |
%A | 非缩写的星期名 | Monday |
%m | 月份(00-12) | 00-12 |
%b | 缩写的月份 | Jan |
%B | 非缩写的月份 | January |
%y | 两位数的年份 | 07 |
%Y | 四位数的年份 | 2007 |
注:R中日期的变量类型是double!!!
意义:可以使用诸多分析方法对这些日期进行分析和绘图
5.2 Sys.Date()函数与date()
Sys.Date()可以返回当天的日期,而date()则返回当前的日期和时间。
5.2使用format()函数输出指定格式的日期值
5.3执行日期值的加减
直接加减!有手就行,见图。
5.4将日期转换为字符型变量
使用as.character()函数
strDates<-as.character(dates)
意义:可使用一系列字符处理函数处理数据(如屈子集,替换,连接等)
六、类型转换
判断 | 转换 | 备注 |
is.numeric | as.numeric | 数值型 |
is.character | as.character | 字符型 |
is.vector | as.vector | 向量 |
is.matrix | as.matrix | 矩阵 |
is.data.frame | as.data.frame | 数据框 |
is.factor | as.factor | 因子 |
is.logical | as.logical | 逻辑 |
七、数据排序
使用order()函数进行排序,默认排序顺序是升序。
#创建一个新的数据集,其中各行按年龄升序排序
attach(leadership)
newdata<-leadership[order(gender,age),]
detach(leadership)
#leadership数据集见前文
加负号则降序排序。
attach(leadership)
newdata<-leadership[order(gender,-age),]
detach(leadership)
八、数据集的合并
8.1按列合并
即横向合并两个数据框(数据集),使用merge()函数。
total<-merge(dataframeA,dataframeB,by="ID")
或者使用cbind()函数直接合并。但合并的每个对象必须拥有相同的行数,且按相同顺序排序。
total<-cbind(A,B)
8.2按行合并
即纵向合并两个数据框(数据集),使用rbind()函数
total<-rbind(dataframeA,dataframeB)
九、数据集取子集
9.1选入变量
方法一
方法二:等价的变量选择:
方法三:使用paste()函数
9.2剔除变量
例:剔除leadership数据里的q3,q4列。
myvars<-names(leadership)%in%c("q3","q4")
mydata<-leadership[!myvars]
代码释义:
如果要剔除某整列。且知道该列变量序号,可使用如下语句:
newdata<-leadership[c(-8,-9)]
再或者
leadership$q3<-leadership$q4<-NULL
9.3选入观测
举例
限定观测日期
9.4使用subset()函数选择并观测变量
该法较为简单
newdata<-subset(leadership,age>=35|age<24,
select=c(q1,q2,q3,q4))
newdata<-subset(leadershi,gender=="M&age>25,
select=gender:q4)
9.5随机抽样
参考书籍:《R语言实战》卡巴科弗
关于R语言的基本数据管理介绍到这里就结束了,希望对大家有所帮助~
此行山高路远,我们下期再见!