R语言和Oracle数据查询总结

连接Oracle数据库

library(RODBC)

**这里是载入RODBC库
channel<-odbcConnect(“MyTest”,uid=“ripley”,case=“tolower”)

**连接刚才添加进数据源的“MyTest”数据库

ch <- odbcConnect("some dsn ", uid = "user ", pwd = "** ")

表示用户名为user,密码是**,如果没有设置,可以直接忽略

data(USArrests)

**将“USArrests”表写进数据库里(这个表是R自带的)

sqlSave(channel,USArrests,rownames = “state”,addPK = TRUE)

**将数据流保存,这时候打开SQL Server就可以看到新建的USArrests表了

rm(USArrests)
sqlTables(channel)

**给出数据库中的表

sqlFetch(channel,“USArrests”,rownames = “state”)

**输出USArrests表中的内容

sqlQuery(channel,“select * from USArrests”)

**调用SELECT查询语句并返回结果(如图)

R语言常用的数据处理的包

一.dplyr包

dplyr包是Hadley Wickham(ggplot2包的作者,被称为‘一个改变R的人’)的杰作, dplyr可用于处理R内部或者外部的结构化数据,相较于plyr包,dplyr专注接受dataframe对象, 大幅提高了速度,并且提供了更稳健的数据库接口。

筛选: filter系列

filter、filter_all、filter_at、filter_if
用法:filter(.data, 条件…)
这里我们用R的内置数据集作为例子(mtcars)

filter(mtcars, cyl == 8)  
filter(mtcars, cyl < 6)  
#过滤出cyl < 6 并且 vs == 1的行  

filter(mtcars, cyl < 6 & vs == 1)  
filter(mtcars, cyl < 6, vs == 1)  
#过滤出cyl < 6 或者 vs == 1的行  
filter(mtcars, cyl < 6 | vs == 1)  
#过滤出cyl 为4或6的行  
filter(mtcars, cyl %in% c(4, 6))  
基于filter函数的用法,扩展出了一些新的函数

1 filter_all(mtcars, any_vars(. > 150)) #筛选任何变量>150的样本
2 filter_at(mtcars, vars(starts_with(“d”)), any_vars((. %% 2) == 0))
3. 筛选变量以“d”结尾,并且变量 “%%2” 等于0
4 filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))
5 筛选变量向下取整 == 原变量数值, 并且这部分变量的数值!= 0 的样本集

slice函数

用法:slice(.data, …)
用处: slice() 函数通过行号选取数据

#选取第一行的数据
slice(mtcars, 1L)
filter(mtcars, row_number() == 1L)
#选取最后一行数据
slice(mtcars, n())
filter(mtcars, row_number() == n())
#####选取第5行到最后一行所有数据
slice(mtcars, 5:n())
filter(mtcars, between(row_number(), 5, n()))
这个函数在实际中并不常用,但是在某些情况下就会非常好用。

排列: arrange

用法:arrange(.data, …)
arrange()按给定的列名依次对行进行排序,默认是按照升序排序,对列名加 desc() 可实现倒序排序。原数据集行名称会被过滤掉。

#以cyl和disp联合升序排序 ,如果cyl相同,按照disp
arrange(mtcars, cyl, disp)
#以disp降序排序
arrange(mtcars, desc(disp))

选择: select

用法:select(.data, …)

#选取变量名前缀包含Petal的列
select(iris, starts_with(“Petal”))
#选取变量名前缀不包含Petal的列
select(iris, -starts_with(“Petal”))
#选取变量名后缀包含Width的列
select(iris, ends_with(“Width”))
#选取变量名后缀不包含Width的列
select(iris, -ends_with(“Width”))
#选取变量名中包含etal的列
select(iris, contains(“etal”))
#选取变量名中不包含etal的列
select(iris, -contains(“etal”))
#正则表达式匹配,返回变量名中包含t的列
select(iris, matches(".t."))
#正则表达式匹配,返回变量名中不包含t的列
select(iris, -matches(".t."))
#直接选取列
select(iris, Petal.Length, Petal.Width)
#返回除Petal.Length和Petal.Width之外的所有列
select(iris, -Petal.Length, -Petal.Width)
#使用冒号连接列名,选择多个列
select(iris, Sepal.Length:Petal.Width)
#选择字符向量中的列,select中不能直接使用字符向量筛选,需要使用one_of函数
vars <- c(“Petal.Length”, “Petal.Width”)
select(iris, one_of(vars))
#返回指定字符向量之外的列
select(iris, -one_of(vars))
#返回所有列,一般调整数据集中变量顺序时使用
select(iris, everything())
#调整列顺序,把Species列放到最前面
select(iris, Species, everything())
一般我们用select函数选择一个数据的几列

df <- as.data.frame(matrix(runif(100), nrow = 10))  
df <- tbl_df(df[c(3, 4, 7, 1, 9, 8, 5, 2, 6, 10)])  
#选择V4,V5,V6三列  
select(df, V4:V6)  
select(df, num_range("V", 4:6))  
变形: mutate

用法:mutate(.data, …)
mutate()函数对已有列进行数据运算并添加为新列,

#添加新列wt_kg和wt_t,在同一语句中可以使用刚添加的列  
mutate(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)  
#计算新列wt_kg和wt_t,返回对象中只包含新列  
transmute(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)  
分组: group

用法:group_by(.data, …, add = FALSE)
group_by()用于对数据集按照给定变量分组,返回分组后的数据集。对返回后的数据集使用以上介绍的函数时,会自动的对分组数据操作。

#使用变量cyl对mtcars分组,返回分组后数据集  
by_cyl <- group_by(mtcars, cyl)  
#返回每个分组中最大disp所在的行  
filter(by_cyl, disp == max(disp))  
#返回每个分组中变量名包含d的列,始终返回分组列cyl  
select(by_cyl, contains("d"))  
#使用mpg对每个分组排序  
arrange(by_cyl,  mpg)  
#对每个分组无重复的取2行记录  
sample_n(by_cyl, 2)  
数据关联:join

类似于merge的用法

#内连接,合并数据仅保留匹配的记录

inner_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", “.y”), …)

#左连接,向数据集x中加入匹配的数据集y记录

left_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", “.y”), …)

#右连接,向数据集y中加入匹配的数据集x记录

right_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", “.y”), …)

#全连接,合并数据保留所有记录,所有行

full_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", “.y”), …)

#返回能够与y表匹配的x表所有记录

semi_join(x,y, by = NULL, copy = FALSE, …)

#返回无法与y表匹配的x表的所有记录
anti_join(x, y, by = NULL, copy = FALSE, …)
当然,dplyr不止这一种用法,希望各位道友一起补充,丰富我们的数据数据经验和生信分析的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值