可以不学习stata,只学习r语言吗

Python013

可以不学习stata,只学习r语言吗,第1张

/* Lecture 1: How to import and export data */

//备注不长于一行可用双斜杠

sysuse "auto.dta",clear

//导入系统自带的数据,clear:关闭之前所有的数据

//字符串变量:红颜色的文字变量。蓝颜色的domestic对应0,foreign对于1

replace make="AMC" in 1

//export data

cd"D:\BaiduNetdiskDownload\stata application"

help export delimited /*stata 自带的帮助文档,只导出csv和txt格式*/

/*导出其中部分变量

export delimited [你想导出的变量名称] using filename [if] [in] [,

export_delimited_options]*/

export delim using"auto.txt",replace

export delim make price using "auto.csv",replace

//MAKE 和price是变量名,只导出这两个变量

help import excel

export excel using "auto.xlsx" in 11/L

//in:第几行到第几行(L表示最后一行)

export excel using "auto.xlsx" if price>=4000,replace

//if: 满足某种条件的变量

export excel using "auto.xlsx" firstrow(var),replace

//import txt file

cd"D:\BaiduNetdiskDownload\stata application"

use "D:\BaiduNetdiskDownload\stata application\Data_luanma.dta"

help unicode

clear

unicode encoding set gb18030

unicode translate "Data_luanma.dta"

use "Data_luanma.dta",clear

//打开大数据

set excelxlsxlargefile on

//允许stata打开大文件

import excel " "

//如果内存太小,如何拆分大文件

findit chunky

help chunky

cd"D:\BaiduNetdiskDownload\stata application"

chunky using "数据文件名称", peek(1)

//看一下数据,不导入,(1)表示第一行

chunky using 数据文件名称 ,analyze

//分析

chunky using 数据文件名称 ,chunksize(10m) header(include) stub(数据文件名称)replace

//按10m的大小拆分文件

import delimited using "其中一个数据文件名称”,clear encoding(数据)

//调用拆分后的其中一个数据

sysuse auto.dta,clear

//调用系统数据

//拆分数据

export delim "auto1.csv" in 1,replace

export delim "auto2.csv" in 2, replace

export delim "auto3.csv" in 3,replace

export delim "auto4.csv" in 4, replace

export delim "auto5.csv" in 5/L, replace

help foreach

foreach num of numlist 1/3 5 8 9(10) 100{

display `num'

}

//重新导入数据

foreach num of numlist 1/74{

display "auto `num'"

import delim "auto`num'.csv", clear

save "auto`num'.dta", replace

}

help append

append using "auto2.csv" "auto3.csv""auto4.csv"/*

*/"auto5.csv"

use "auto1.dta", clear

foreach num of numlist 2/5{

append using "auto`num'.dta"

}

save"auto_new.dta", replace

ssc install openall

findit openall

openall, auto?, insheet

//删除多余文件

foreach x of numlist 1/5{

erase"auto`x'.csv"

}

//lecture 3

cd "D:\BaiduNetdiskDownload\stata application"

help format

sysuse auto.dta

//改变字符串的长度,为了方便浏览

format %30s make

//浏览

edit make

//显示字符串和数值变量

edit make price headroom

format %-20s make

//小数点后面两位数

format %3.2f headroom

//

format %10.0g price

//在result窗口展示数据

list make price headroom in 1/10

//变量的标签

sysuse auto.dta, clear

//介绍数据集的基本情况

describe

//改变整个数据的标签

label data "US auto data美国汽车数据"

//改变变量标签

label var price "auto price汽车价格"

//修改虚拟变量标签,先定义后标签

label define origin_v 0 "国产" 1 "进口"

label values foreign origin_v

describe

replace foreign = 2 in 1/8

//每一次定义新标签要重新命名origin

label define origin_new2 0 "国产" 1 "进口" 2 "unknown"

//显示

list make if foreign == 0 //一个等号表示赋值

list make price if make =="AMC Concord" /*

*/ | make =="Merc. Cougar"

list make foreign price if (foreign == 1&price <=5000) /*

*/ | (foreign == 0 &price >3000)

list make price if inlist (make, "AMC Concord" "Merc. cougar", )

sysuse auto.dta , clear

export excel using "auto.xlsx", nolabel replace

import excel using "auto.xlsx", clear

describe

//修改变量名称

rename

rename A price

rename _all, proper//让变量首字母大写,剩下字母小写

//将变量名称批量写入标签, 重要的是所有的变量循环_all

foreach v of varlist _all {

label variable `v' " `v' "

}

//shenme yisi

generate//建立新变量

replace//更改已有变量

cd "D:\BaiduNetdiskDownload\stata application"

sysuse auto.dta, clear

gen price2=price^2 //生产price2的平方

gen price_mpg = price*mpg if foreign == 1 //生成price 和mpg的交叉项 如果foreign=1

replace price_mpg =0 if price_mpg == .

//用0取代缺失值

gen logprice = log(price) //生产price的对数指

gen lnprice = ln(pice) //生成price的自然对数指,其实和上行生成的结果一样的

//出现零的时候取对数会成为missing数据,可能会丢失数据

replace price_mpg = price*mpg //生成price和mpg的交叉项,并取代price_mpg变量

gen pricecateg = 0//生产pricecateg变量,并将数据分组

replace pricecateg = 1 if price >=5000 &price <10000

replace pricecateg = 2 if price >= 10000

0

edit price pricecateg

label define category 0 "less than 5k" 1 "between 5k and 10k" 2 "more than 10k"

label values pricecateg category

//重命名

edit price pricecateg

help egen

egen priceavg3 = mean(price)

gen price_dev = price - priceavg3

//如何分别计算foreign和domestic的均值

sort foreign

//方法一

egen price_avg = mean(price) if foreign == 1

egen price_avg2 = mean(price) if foreign == 0

replace price_avg = price_avg2 if foreign == 0

drop price_avg2

//方法二

by foreign: egen priceavg_by = mean(price)//按照foreign的分类做均值

sort foreign //给foreign按数据大小排序

help tostring // 数值变量变字符串

help destring //字符串变数值变量,字符串不可以做运算的

sysuse auto.dta, clear

edit mpg

tostring mpg, gen(mpg_str)

tostring mpg, replace force//不想产生新的变量,有mpg取代原来的

edit mpg mpg_str

destring mpg_str, replace force//将字符串变数值

edit mpg mpg_str

sysuse auto.dta, clear

encode make, gen(make_num)//将文字变量重新编码成数字

edit make_num make

sysuse auto.dta, clear

//产生虚拟变量

gen dummy_high = 0//生成一个全是零的新变量

replace dummy_high = 1 if price>= 10000//用1取代价格大于某数的dummy high

//另一种方法

gen indicator_hi = (price>10000)//满足括号里面条件的为1

//展示出两个变量不一样的地方(check的方法)

edit price dummy_high indicator_hi

edit dummy_high indicator_hi if dummy_high ~=indicator_high

sum dummy_hgh indicator_high

recode foreign (0=1) (1=2), gen (for_new)

//计算price的四分卫区间, 25%, 50%, 75%

egen price_pc25 = pctile(price),p(25)

egen price_pc50 = pctile(price),p(50)

egen price_pc75 = pctile(price),p(75)//分别计算这这点的数值是多少

gen price_4cat=0

replace price_4cat=1 if price >=price_pc25&price<price_pc50

replace price_4cat=2 if price >=price_pc50&price<price_pc75

replace price_4cat=3 if price >price_pc75

/*数据合并

append merge joinby*/

//数据纵向合并

sysuse auto.dta,clear

keep if foreign == 0//只保留国产的数据

save auto_domestic.dta, replace

sysuse auto.dta, clear

keep if foreign == 1

save auto_foreign.dta,replace

append using auto_domestic.dta//合并

//数据横向合并

sysuse auto.dta, clear

gen id = _n//给横向排序(车型号)

keep make id mpg weight length

save auto_tech.dta, replace

sysuse auto.dta, clear

gen id_=n

drop make mpg weight length//丢掉一些数据

help merge

merge 1:1 id using "auto_tech.dta"

cd"D:\BaiduNetdiskDownload\stata application"

use "nei_sample.dta",clear

edit newid year so2//调用这三个变量

sort newid year

//从小到大排序

//有些变量有些地方是没有观测值的,叫做非平衡样本

gsort newid -year

edit newid year facilityname_origin

gsort -facilityname_origin year

order so2 co newid year//按这个顺序展示这些变量

order newid, before(co)//把某个变量提到某个变量之前

//string variable字符串变量

use"nei_sample.dta",clear

edit newid facilityname_origin year

sort newid facilityname_origin year

gen facility_name = facilityname_origin //生成一个变量

edit facility_name facilityname_origi

replace facility_name = lower(facility_name)//变量名称小写化

upper //变量名称大写花

//trim ltrim rtrim 去掉空格zuo you zhong

replace facility_name = trim(facility_name)

edit facility_name

replace facility_name = ltrim(facility_name)

replace facility_name = rtrim(facility_name)

replace facility_name = subinstr(facility_name,","," ",.)

replace facility_name = subinstr(facility_name,"."," ",.)

replace facility_name = subinstr(facility_name,"/"," ",.)

replace facility_name = subinstr(facility_name,"#"," ",.)

//替代标点,全部替代用空格替代

replace facility_name = subinstr(facility_name,":"," ",.)

replace facility_name = subinstr(facility_name,"’"," ",.)

replace facility_name = subinstr(facility_name,"**"," ",.)

replace facility_name = subinstr(facility_name,":"," ",.)

replace facility_name = subinword( facility_name,"company"," ",.)

replace facility_name = subinstr(facility_name,"co"," ",.)

replace facility_name = subinstr(facility_name,"inc"," ",.)

replace facility_name = subinstr(facility_name,"lp"," ",.)

replace facility_name = ltrim(facility_name)

replace facility_name = subinstr(facility_name,"u s","us",.)

gen flag = 1 if regexm(facility_name,"u s")==1

//生成新的变量 将带有u s 的变量标注为一,帮助寻找

gen flag2 = 1 if regexm(facility_name,"us")==1

split facility_name

gen fac_name = facility_name1+" "+facility name2

edit zipcode

split zipcode,parse(-)

//按照某种符号拆分字符串

edit zipcode

help substr //截取

gen zip5=substr(zipcode,1,5)//生成zip5,表示截取zipcode的前五位

edit zipcode zip5 if length(zip5) ~=5 //展示长度不等于5的zip5和zipcode

edit zip5

gen len_cn = ustrlen(zipcode) //生成中文字符串长度

edit fips

gen fips2 = substr(fips, 1,2)

edit fips2

gen fips3 = substr(fips, 3,3)

edit fips2 fips3

destring fips2, replace force

destring fips3, replace force

tostring fips2 fips3, replace force

edit fips2 fips3

replace fips2="0"+fips2 if length(fips2)==1

replace fips3="0"+fips3 if length(fips3)==2

replace fips3="00"+fips3 if length(fips3)==1

//前面用零补齐,补成五位

help duplicates//重复观测值

sort newid

duplicates report newid year //报告重复观测值

duplicates tag newid year, gen(dup)

tab dup//展示

edit new year if dup>=177

duplicates drop newid year,force //去掉重复样本

duplicates report newid year

ssc install unique //安装unique

unique newid year//展示有几个是唯一的

unique fips

collapse (sum) so2 co nox nh3 voc (first)facilityname_origin fips zipcode, by(newid year)

//关于newid year重复的字符串变量,只取第一个,数值变量加总

collapse (sum) so2 co nox nh3 voc (count)newid , by(fips year)

//关于fips year 加总。。。 数出newid

//改变面板数据的结构

help reshape

keep newid year so2

duplicates drop newid year,force

reshape wide so2 , i(newid) j(year)

reshape long so2, i(newid) j(year)

//

duplicates drop newid year, force

unique newid year

keep newid year so2 co nox voc nh3 sic

reshape wide so2 co nox voc nh3, i(newid sic) j(year)

//数据变少了是因为有的newid对应多个sic

reshape long so2 co nox voc nh3, i(newid sic) j(year)

//reshape来回两次就是平衡面板数据

//quiz reshape id- year-pollutant-emissions

keep newid year so2 co nox voc

ren (so2 co nox voc)(pol1 pol2 pol3 pol4 )

reshape long pol, i(newid year) j(type)

tostring type,replace force

replace type= "so2" if type=="1"

//滞后

edit newid year so2

duplicates drop newid year,force

edit newid year so2

sort newid year

by newid: gen lag1so2=so2[_n-1]

//滞后一行,不一定滞后一期

by newid:gen f1so2=so2[_n+1]

bys newid: gen Nso2 = so2[_N]//最后一期

//滞后一期,解决不平衡面板

xtset newid year

gen lso2=l.so2

//

duplicates drop newid year,force

edit fips newid year

sort fips newid year

by fips year: egen id_sum=count (newid)

edit fips year newid so2

by fips year:egen so2_fips=sum(so2)

//

collapse(sum) so2 co nox nh3 voc (first) facilityname_origin fips

//加总一个地区的所有公司的污染构造这个地区的总污染量

duplicates report newid year

collapse (sum) so2 co nox nh3 voc (count) newid ,by(fips year)

//collapse by 2-digit sic and fips_state and year

gen state = substr(fips,1,2)

gen sic2 = substr(sic,1,2)

collapse (sum) so2 co nox nh3 voc ,by(state sic2 year )

R语言数据对象与运算

R语言数据对象与运算 笔记整理

2.1 数据对象及类型

R语言创建和控制的实体被称为对象(object)

ls()命令来查看当前系统里的数据对象

R对象的名称必须以一个英文字母打头,并由一串大小写字母、数字或钟点组成

注意:R区分大小写

不要用R的内置函数名称作为数据对象的名称,如c、length等

2.2 数据对象类型

R语言的对象包括

数值型(numeric):实数, 可写成整数(integers)、小数(decimal fractions)、科学记数(scientific notation)

逻辑型(logical):T(true)或F(FALSE)

字符型(character):夹在" "或之间

复数型(complex):形如a+bi

原味型(raw):以二进制形式保存数据

缺省型(missing value):有些统计资料是不完整的,当一个元素或值在统计的时候是“不可得到(not available)”或“缺失值(missing value)”的时候,相关位置可能会被保留并赋予一个特定的NA(not available)值,任何NA的运算结果都是NA。

辨别和转换数据对象类型的函数:

辨别 转换

character is.character() as,character()

complex

double

integer

logical

NA

numeric

2.3 数据对象构造

R语言里的数据对象主要有六种构造:向量(vector)、矩阵(matrix)、数组(array)、列表(list)、数据框(data frames)、因子(factor)

2.3.1 向量(vector)是由有相同基本类型元素组成的序列,相当于一维数组

5个数值组成的向量x,这是一个用函数c()完成的赋值语句,这里c()可以有任意多个参数,而它输出的值则是一个把这些参数首尾相连形成的一个向量

R的赋值符号除了“<-”外,还有"->""="

例如:

>c(1,3,5,7,9) ->y

>y

[1] 2 5 8 3

>z = c(1,3,5,7,9)

>z

[1] 1 3 5 7 9

assign()函数对向量进行赋值

length():可返回向量的长度

mode()可返回向量的数据类型

正则序列 用 “:”符号,可产生有规律的正则序列(: 的运算级别最高)

函数seq()产生有规律的各种序列

seq(from,to ,by) from 给序列的起始值,to表示序列的终止值,by表示步长(by 省略时,表示步长值为1)

>seq(1,10,2)

[1] 1 3 5 7 9

>seq(1,10)

[1] 1 2 3 4 5 6 7 8 9 10

有时关注的是数列的长度,利用句法:seq(下界,by=,length=)

>seq(1,by=2,length=10)

[1] 1 3 5 7 9 11 13 15 17 19

rep(x,times,……)x表示要重复的对象,times表示重复的次数

>rep(c(1,3),4)

[1] 1 3 1 3 1 3 1 3

>rep(c(1,3),each=4)

[1] 1 1 1 1 3 3 3 3

对每个元素进行重复

R中的内置函数:

mean()来示向量的均值

median()求是位数

var()求方差

sd()求标准差

sort()对向量排序

rev()将向量按原方向的反方向排列

rank()给求出向量的秩

prod()求向量连乘积

append()为向量添加元素

对向量运算常见函数表

函数 用途

sum() 求和

max() 求最大值

min() 求最小值

range() 求极差(全矩)

mean() 求均值

median 求中位数

var() 求方差

sd() 求标准差

sort() 排序

rev() 反排序

rank() 求秩

append() 添加

replace() 替换

match() 匹配

pmatch() 部分匹配

all() 判断所有

any() 判断部分

prod() 积

2.3.2 矩阵

矩阵(matrix)是将数据用行和列排列的长方形表格,它是二维的数组,其单元必须是相同的数据类型,通常用列来表示不同的变量,用行表示各个对象。

其句法是:

matrix(data=NA,ncol=1,byrow-=FALSE,dimnames=NULL)

data是必须的,其它几个选择参数。

nrow表示矩阵的行数

ncol表示矩阵的列数

byrow默认为FALSE,表示矩阵按列排列,如设置为T,表示按行排列;

dimnames可更改矩阵行列名字

diag()函数生成对角矩阵

diag()这个函数比较特别,当数据是向量时则生成对角矩阵,但当数据是矩阵时,则返回对角元素

也可用函数diag()生成单位矩阵

当我们生成了某个矩阵后,若要访问矩阵的某个元素或某行(列),可以利用形如A[i,j]的形式得到相应的索引矩阵

矩阵可进行相应的加减乘除运算,但运算过程中要注意行数和列数的限制条件

R里A*B并不是表示矩阵相乘,只表示矩阵对应的元素相乘

矩阵相乘应用A%*%B

dim()返回矩阵的行数和列数

nrow()返回矩阵的行数

ncol()返回矩阵的列数

solve()返回矩阵的逆矩阵

对矩阵运算的常见函数

函数 用途

as.matrix() 把非矩阵的转换成矩阵

is.matrix() 辨别是否矩阵

diag() 返回对角元素或生成对角矩阵

eigen() 求特征值和特征向量

solve() 求逆矩阵

chol() Choleski分解

svd() 奇异值分解

qr() QR分解

det() 求行列式

dim() 返回行列数

t() 矩阵转置

apply() 对矩阵应用函数

R语言还提供了专门针对矩阵的行或列计算的函数

如 colSUms()对矩阵各列求和colMeans()求矩阵各列的均值

类似的有 rowSums()rowMeans()

更一般的方法:

apply()函数来对各行各列进行运算

句法是:apply(X,MARGIN,FUN,……)

X表示要处理的数据

MARGIN表示函数作用的范围

取1表示对行运用函数

取2表示对列运用函数

FUN表示要运用的函数

rbind()、cbind()将两个或两个以上的矩阵合并起来

rbind()表示按行合并,cbind()则表示按列合并

2.3.3 数组

数组(array)可以看作是带有多个下标的类型相同的元素的集合。

数组的生成函数是array(),其句法是

array(data=NA,dim=length(data),dimnames-NULL)

data表示数据,可以为空

dim 表示维数

dimnames可以更改数组难度的名称

2.3.4 列表

向量、矩阵和的单元必须是同一类型的数据,若一个数据对象需要含有不同的数据类型,可采用列表(list)这种数据对象的形式。

列表是一个对象的有序集合构成的对象,列表中包含的对象又称为它的分量(components),分量可以是不同的模式或(和)类型

语法式为:list (变量1=分量1,变量2=分量2,……)

若要访问列表的某一成分,可以用LST[[1]],LST[[2]]的形式访问

因分量可以被命名,故可以在列表名称后加$符号,再写上成分名称来访问列表分量

函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型、列表里成分的名字

2.3.5 数据框

数据框(data frame)是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。数据框每列是一个变量,每行是一个观测 。

对可能列入数据框中的列表有如下的一些限制:

1.分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框。

2.矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列、元素或者变量。

3.数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值。

4.在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数。

R中用函数data.frame()生成数据框,其句法是:data.frame(data1,data2,……)

数据框的列名默认为变量名,也可对列名进行重新命名

也可以对数据框的行名进行修改

2.3.6 因子和有序因子

分类型数据经常要把数据分成不同的水平或因子(factor)

生成因子的命令是factor(),其句法是:factor(data,levels,labels,……)

其中data表示数据

levels是因子水平向量

labels是因子的标签向量

levels,labels是备选项,可以不选

若上面的每个因子并不表示因子的大小,要表达因子之间有大小顺序(考虑因子之间的顺序),则可以用 ordered()函数产生

2.4 数据的录入及编辑

c函数:c函数是把各个值联成一个向量或列表,可以形成数值型向量、字符型向量或其它类型向量

scan函数:功能类似于c函数,实际上是一种键盘输入数据函数。当输入scan(),然后按回车键,这时将等待输入数据,数据之间只要空格分开即可(c函数要用逗号分开)。输入完数据,再按回车键,这时数据录入完毕。

scan函数还可以读入外部文本文件,若现有一个文本文件,data.txt,读入这个文件的命令是:>x=scan(file="dat.txt")

若原文件的数据之间有逗号等分隔符,用scan读入应该去掉这些分隔符,其命令是:>x=scan(file="dat.txt",sep=",")

编辑数据

data.entry命令

xx原先未被定义,现在赋予其一个空值,这时会出现一个电子表格界面,等待输入数据:>data.entry(xx=c(NA))

当电子表格关闭后,数据会自动保存

edit命令用来编辑函数,也可用来编辑数据,但不会自动保存

fix函数与edit类似,但它可以自动保存

从外部文件读入数据

从文本文件读取:

>s1=read.table("student.txt")

>s1

V1V2V3

1class sexscore

2 1 女80

3 1 男85

4 2 男92

5 2 女76

6 3 女61

7 3 女95

8 3 男83

读入表格数据的命令是:read.table

忽略掉标签而直接使用默认的行标签

>s2=read.table("student.txt",header=T)

>s2

class sexscore

1 1 女80

2 1 男85

3 2 男92

4 2 女76

5 3 女61

6 3 女95

7 3 男83

从网络读入数据

url可以从网页上读入正确格式的数据,要借助read.table函数

> address=http://www.the-data-mine.com/bin/view/Misc/WebHome

/sample.txt

>read.table(file=url(address))

读入其他格式的数据库

要读入其他格式的数据库,必须先安装"foreign"模块,它不属于R的8个内置模块,需在使用前安装。 library(foreign)

SAS:R只能诗篇SAS Transport format(XPORT)文件,需要把普通的SAS数据文件(.ssd和.sas7bdat)转换成Transport format(XPORT)文件,再用命令:read.xport()

SPSS数据库:read.spss()可读入SPSS数据文件

Epi info数据库:

要给数据集一个名字,则是read.epiinfo("文件名.rec")->名称

Stata数据库:

R可读入Stata5,6,7的数据库

读入数据文件后,使用数据集名$变量名,即可使用各个变量

>read.dta(“文件名.dta”)

读入数据文件后,使用数据集名$变量名,即可使用各个变量。

>mean(data$age)

便是计算数据集 data中的变量age的均数。

2.5 函数、循环与条件表达式

2.5.1 编写函数

句法是:

函数名 = function (参数1,参数2…)

{

函数体

函数返回值

}

对于这类只有一个算术式的简单函数,也要不要{}

>mean(data$age)

便是计算数据集 data中的变量age的均数。

若不使用圆括号,直接输入函数名,按回车键将显示函数的定义式:

单参数:使函数个性化,可使用单参数,函数将会根据参数的不同,返回值不同

> welcome.sb = function(names) print(paste("welcome",names,"to

use R"))

>welcome.sb("Mr fang")

[1] "welcome Mr fang to use R"

>welcome.sb("Mr Wang")

[1] "welcome Mr Wang to use R"

默认参数:即不输入任何参数

函数的默认参数

> welcome.sb=function(names="Mr fang")print(paste("welcome",

names,"to use R"))

>welcome.sb()

[1] "welcome Mr fang to use R"

当函数体的表达式超过一个时,要用{}封起来

2.5.2 for循环

for循环的句法是:

for (变量 in取值向量) {

表达式…

}

阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通

过函数matrix()创建矩阵。一般使用格式为

其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选

的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)

还是按列填充(byrow=FALSE),默认情况下按列填充

数组(array)与矩阵类似,但是维度可以大于2, 数组可通过array函数创建,形式如下:

myarray <- array(vector, dimensions, dimnames)

其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大

值,而dimnames是可选的、各维度名称标签的列表

由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更

为一般。它与你通常在SAS、SPSS和Stata中看到的数据集类似。数据框将是你在R中最常处理的

数据结构

数据框可通过函数data.frame()创建

其中的列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。每一列的名

称可由函数names指定

每一列数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。由于数据框与分析人员通常设想的数据集的形态较为接近,我们在讨论数据框时将交替使用术语列和

变量

类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现

函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1...k](其中k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上

对于字符型向量,因子的水平默认依字母顺序创建。这对于因子status是有意义的,因为

“Excellent”“Improved”“Poor”的排序方式恰好与逻辑顺序相一致。如果“Poor”被编码为

“Ailing”,会有问题,因为顺序将为“Ailing”“Excellent”“Improved”。如果理想中的顺序是“Poor” “Improved”“Excellent”,则会出现类似的问题。按默认的字母顺序排序的因子很少能够让人满意.

你可以通过指定levels选项来覆盖默认排序。例如:

各水平的赋值将为1=Poor、2=Improved、3=Excellent。请保证指定的水平与数据中的真实值

相匹配,因为任何在数据中出现而未在参数中列举的数据都将被设为缺失值。数值型变量可以用levels和labels参数来编码成因子。如果男性被编码成1,女性被编码成2,则以下语句

列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合