包中提供了到MySQL数据库的接口;RODBC包提供了更为广泛数据库接口的解
决方案—支持所有标准ODBC接口的数据库。通过这种方式,相同的R代码可以方便地应用于不同类型的数据库。
RMySQL
library(RODBC)
2
5
ch
4
经测试,Windows平台上的MicrosoftSQLServer、Access、Oracle、MySQL、PostgreSQL,和Linux平台上的MySQL、Oracle、PostgreSQL、SQLite都有良好的应用案例(详细参考R-data)。
§D数据处理
47.如何删掉缺失值?
6在R中使用NA(notavailable)表示缺失值,要注意R(S)语言中NA同样是一个逻辑值,
x
2
x>3class(x)
故当判断是否相等时不能使用
1
x==NA
来判断缺失值。而是使用函数is.na()来判断是否为缺失值,使用
1
x[!is.na(x)]
删除缺失值。
48.如何将字符串转变为命令执行?
这里用到eval()和parse()函数。首先使用parse()函数将字符串转化为表达式(expression),而后使用eval()函数对表达式求解。
1
x1:10a\class(a)
eval(parse(text=a))49.如何向一个向量追加元素?
3
参考append()函数。
5需要包6R
DBI的支持
共有三个逻辑值TRUE、FALSE、NA
10
x1:5
2
(foo
#expectedresult
可以使用函数subset(select=);或者使用下标:
1
x
new.x1
#row#col
3
5
new.x2
事实上,关于选取特定条件下的数据框数据,subset函数同使用下标效果相同:
iS
2
iris[iS,c(1,3)]
subset(iris,select=c(Sepal.Length,Petal.Length),Species==\)51.如何比较两个数据框是否相同?
比较每个元素是否相同,如果每个元素都相同,那么这两个数据框也相同
1
a1
a2[[3,1]]2?>a2[[8,2]]any(a1!=a2)
#
all(a1
==
a2)
3
any()函数可以返回是值是否至少有一个为真的逻辑值。而数据框中的元素有不相等的情况,则
a1!=a2
将返回至少一个TRUE,那么any()函数将判断为TRUE。同样也可以使用identical()函数。
1
indentical(a1,a2)
如果需要返回两个数据框不相同的位置,可以使用
1
which(a1!=a2,arr.ind=TRUE)
arr.ind参量是arrayindices之意,返回数据框的行列位置。52.我的数据框有相同的行,如何去掉这些行?
参考unique函数。unique函数可以去掉向量、数据框或类似数列的数据中重复的元素。
11
1
x
#
is
more
efficient
3
这里duplicated函数返回了元素是否重复的逻辑值。
53.如何对数列(array)进行维度变换?
使用函数aperm
1
x
;
dim(xt)
xt
3
dim(x)
54.如何删除list中的元素?R中使用NULL表示无效的对象。
1
lst
#
or
lst
$a$b
NULL
3
lst
55.如何对矩阵按行(列)作计算?
使用函数apply()
1
vec=1:20
mat=matrix(vec,ncol=4)vec
cumsum(vec)mat
apply(mat,2,cumsum)apply(mat,1,cumsum)56.如何注掉大段的R脚本
3
5
7
如果你使用支持正则表达式的文本编辑器的话,可以考虑用正则表达式(RegularExpression);或者将大段的代码写入一个*.R文件,如果需要注掉的话,在source(*.R)前加入#即可;还可以使用
1
if(FALSE){somethingpassby}
57.如何对数据框(dataframe)的某列作数学变换?
3
使用transform()函数对其操作,具体参考?transform
12
58.如何求解两组平行向量的极值?pmax()和pmin(),如:
1
x1:10pmax(x,y)
;;
y
59.如何对不规则数组进行统计分析?
参考tapply():
n17;fac
2
table(fac)
tapply(1:n,fac,sum)tapply(1:n,fac,mean)
##
or
reverse
a
list
4
6
to
tapply()的常见于方差分析中对各个组别进行mean、var(sd)的计算。说到概要统计,不得不说另
外一个函数aggregate(),它将tapply()函数对象为向量的限制扩展到了数据框。7
1
attach(warpbreaks)
tapply(breaks,list(wool,tension),mean)aggregate(breaks,list(wool,tension),mean)
##
from
the
help
3
5
aggregate(state.x77,
list(Region=state.region,
Cold=state.x77[,\]>130),
mean)
60.判断数据框的列是否为数字?sapply(dataframe,is.numeric)61.一组数中随机抽取数据?
7
函数sample()
sample(n)sample(x)
sample(x,replace=T)
sample(x,n)
sample(x,n,replace=T)
sample(x,n,replace=T,prob=p)
7当然同样概要统计的表现形式不一样
随机组合1,...,n
随机组合向量x,length(x)>1
解靴带法
非放回的从x中抽取n项放回的从x中抽取n项
以概率p,放回的从x中抽取n项
13
n1000
2
x
main=\sumsofBernoullivariables\)
4
还可以参考第17页中关于模拟已知分布的随机数据函数,如:
rnorm(100,mean=0,sd=1)
62.如何根据共有的列将两个数据框合并?
我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同。处理的办法就是使用merge(x,y,by.x=,by.y=,all=)函数。
63.如何将数据标准化?
参考scale函数。
1
x
##
onlyonly
centeringscaling
3
n
64.为什么?venum和summary两个函数返回的结果不同?
因为他们对数据描述机理一致,所以有些教材将二者等同,但他们确实有细微差别。
1
>fivenum(c(1,4,6,17,50,51,70,100))[1]
1.025%5.50
5.0503.50
33.5
75%
60.5100.0
100%
>quantile(c(1,4,6,17,50,51,70,100))0%1.00
55.75100.00
3
5
我们看下他们的的定义:分位数是指有百分之多少的数据小于的数值(summary()函数,即使用分
3
位数概念),我们可以看到14,4分位数的定义:
11
1+(length(x)?1),分位数
4433
1+(length(x)?1),分位数
44
而?venum()函数是完全利用中位数概念。
§E数学运算
65.如何做出曲线积分?
R语言使用integrate函数来得到积分结果,如
14