fix()与edit()的区别
- 用
edit
修改完关闭编辑器后,并不会保存
你的修改 - 用
fix
修改完关闭编辑器后就会直接保存
你的修改
R语言中的逻辑运算符
Operator | Description |
---|---|
< | 小于、less than |
<= | 小于等于、less than or equal to |
> | 大于、greater than |
>= | 大于等于、greater than or equal to |
== | 相等、exactly equal to |
!= | 不相等、not equal to |
!x | 非、Not x |
x | y | 或、x OR y |
x & y | 与、x AND y |
isTRUE(x) | 测试是否为真(True)、test if X is TRUE |
数据排序
order()
1 | # 以mtcars数据为例对数据进行排序 |
数据合并
向数据框添加列,通常用于向数据框中添加变量
- merge() 函数
- 数据帧必须具有相同的列名称,在其上进行合并
- cbind() 函数
- 两数据框的行数相同,并且位置已经匹配完成
向数据框中添加行,纵向联结通常用于向数据框中添加观测
- rbind() 函数
- 两个数据框必须拥有相同的变量,并且位置已经匹配完成
merge()
base 包(merge)
语法
1 | merge(x, y, by = intersect(names(x), names(y)), |
属性
- x,y:要合并的两个数据集
- by:用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名
- by:intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列。也可以直接写为 by = “公共列名” ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写
- by.x,by.y:指定依据哪些列关联数据框,默认值为相同列名的列
- all,all.x,all.y:指定x和y的行是否应该全在输出文件
- sort:by指定的列(即公共列)是否要排序
- suffixes:指定除by外相同列名的后缀;如设置 suffixes = c(“.xx”, “.yy”),两个数据框都有列名 grade,关联后就会被区分为 grade.xx 和 grade.yy
- incomparables:指定by中哪些单元不进行关联
常用的参数
- by
- 根据相同列名的列进行关联
by.x/by.y
- 可以分别指定两个数据框的列进行关联
all/all.x/all.y
- 逻辑变量,控制返回 x 和 y 所有/仅 x 数据框/仅 y 数据框的行
sort
- 逻辑变量,根据关联的列进行排序
案例
1 | grade1 <- data.frame(number = c(2, 3, 1), Names = c("小明", "小红", "小李"), math = c(90, 80, 100)) |
默认时根据同名列进行关联,在上例中Names和NAMES由于大小写不一致,因此未关联,解决这个问题我们可以使用by.x、by.y关联。
1 | merge(grade1, grade2, by.x = c("number", "Names"), by.y = c("number", "NAMES")) |
通过 all/all.x/all.y 指定保留我们想要的行
1 | merge(grade1, grade2, by.x = c("number", "Names"), by.y = c("number", "NAMES"), |
最后我们通过 sort 对关联的变量进行排序。
默认 sort = T,将 by 中的第一个变量作为第一依据,第二个变量作为第二依据,以此类推进行排序。
注意观察下述代码与之前的差异:
1 | merge(grade1, grade2, by.x = c("Names", "number"), by.y = c("NAMES", "number"), |
cbind()
1 | # Create vector objects. |
1 | city state zipcode |
rbind()
1 | # Create another data frame with similar columns |
1 | new.address |
数据集取子集
构建数据框
1 | PatientID<-c(1,2,3,4,5,6) |
1 | PatientID Data Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2 |
选入(保留)变量
方法一
1 | newdata1<-mydata[,c(6:10)]#其中的“,”表示默认选择所有行 |
1 | Pr1 Pr2 Pr3 Pr4 Pr5 |
方法二
1 | newdata3<-paste("Pr",1:5,sep="") |
1 | > newdata3<-paste("Pr",1:5,sep="") |
方法三
1 | newdata2<-c("Pr1","Pr2","Pr3","Pr4","Pr5") |
剔除(丢弃)变量
若某个变量出现缺失值,在进一步分析之前可能需要丢掉
方法一
1 | newdata4<-names(mydata)%in%c("Pr2","Pr4") |
1 | PatientID Data Age Gender City Pr1 Pr3 Pr5 S1 S2 |
解释
方法二
知道元素位置时
1 | newdata6<-mydata[c(-7,-9)] |
1 | PatientID Data Age Gender City Pr1 Pr3 Pr5 S1 S2 |
方法三
1 | mydata$Pr2<-mydata$Pr4<-NULL |
选入观测
subset()函数
语法
1 | subset(dataset , subset , select ) |
属性
- dataset 是要进行操作的数据集
- subset 是对数据的某些字段进行操作
- select 选取要显示的字段
案例
选择mydata中的Age大于等于30或Age小于等于25的行,保留变量Pr1到Pr5
1 | newdata9<-subset(mydata,Age>=35|Age<25,select=c(Pr1,Pr2,Pr3,Pr4,Pr5)) |
1 | PatientID Data Age Gender City Pr1 Pr3 Pr5 S1 S2 |
选60岁以上的男性,并保留变量Age到S1之间所有的列
1 | Gender City Pr1 Pr3 Pr5 S1 |
使用SQL语句操作数据框
1 | install.packages("sqldf") |
随机抽样
1 | sample(x, size, replace = FALSE) |
参数详解
- x 整体数据,以向量形式给出
- size 抽取样本的数目
- replace 如果为F(默认),则是不重复抽样,此时size不能大于x的长度;
如果为T,则是重复抽样,此时size允许大于x的长度
日期值
格 式 | 涵 义 |
---|---|
%Y | 年份,以四位数字表示,2007 |
%m | 月份,以数字形式表示,从01到12 |
%d | 月份中当的天数,从01到31 |
%b | 月份,缩写,Feb |
%B | 月份,完整的月份名,指英文,February |
%y | 年份,以二位数字表示,07 |
…… | …… |
字符型转换为日期
1 | as.Date() |
返回当天日期
1 | Sys.Date() |
返回当前日期和时间
1 | date() |
输出指定格式的日期值
1 | format(x,format="output_format") |
计算时间间隔
1 | difftime() |
将日期转换为字符型变量
1 | as.character() |
其它复杂操作
- lubridate包、timeDate包等
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小狼的学习笔记!
评论