条件赋值
variable[condition] <- expression
leadership$age[leadership$age == 99] <- NA创建新变量,根据 age 赋值
leadership$agecat[leadership$age > 75] <- "Elder" leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged" leadership$agecat[leadership$age < 55] <- "Young" 可简写为 leadership <- within(leadership,{ agecat <- NA agecat[age > 75] <- "Elder" agecat[age >= 55 & age <= 75] <- "Middle Aged" agecat[age < 55] <- "Young" })within() 与 with() 类似,within() 允许修改数据框
花括号内换行不需要逗号
重编码函数:cut() ,car 包中 recode() ,doBy 包中 recodevar()
调用交互式编辑器
fix(leadership)通过 names() 重命名变量
names(leadership)[2] <- "testDate" names(leadership)[6: 10] <- c("item1", "item2", "item3", "item4", "item5")修改变量名函数:plyr 包中 rename()
rename(dataframe, c(oldname="newname", oldname="newname", ...))缺失值
NA Not Available 不可用
检测缺失值
is.na()
不可能的值
NaN not a number 不是一个数
检测不可能的值
is.infinite() is.nan()
leadership示例
leadership$age[leadership$age == 99] <- NA含有缺失值的算数表达式和函数的计算结果也会是缺失值
使用 na.rm=TRUE 移除缺失值再运算
y <- sum(x, na.rm=TRUE)使用 na.omit() 移除所有含缺失数据的行
newdata <- na.omit(leadership)使用 as.character() 将日期值转化为字符型
strDates <- as.character(dates)使用 order() 对一数据框进行排序,默认升序
newdata <- leadership[order(leadership$age), ]排序变量前加减号,降序排序
使用 merge() 横向合并两个数据框
total <- merge(dataframeA, dataframeB, by="ID")使用 cbind() 直接横向合并两个矩阵或数据框
total <- cbind(A, B)使用 rbind() 纵向合并两个数据框
total <- rbind(dataframeA, dataframeB)两数据框必须拥有相同的变量
使变量一直,预处理:
删除多余变量
创建缺失值变量
创建新数据集保留需要变量
newdata <- leadership[ ,c(6:10)]将行下标留空,表示选择所有行
通过变量名选择数据
myvars <- c("q1", "q2", "q3", "q4", "q5") newdata <- leadership[myvars]等同
myvars <- paste("q", 1:5, sep="") newdata <- leadership[myvars]通过变量下标剔除变量,在列下标前加一减号,剔除该列
newdata <- leadership[c(-8, -9)]通过变量名剔除变量
myvars <- names(leadership) %in% c("q3", "q4") newdate <- leadership[!myvars]将不需要列赋值为NULL
leadership$q3 <- leadership$q4 <- NULL通过下标选入观测
newdata <-leadership[1:3, ]通过筛选选入观测
newdata <- leadership[leadership$gender=="M" & leadership$age >30, ]可改写为
attach(leadership) newdata <- leadership[gender=="M" & age >30, ] detach(leadership)限定时间在2009年1月1日和2009年12月31日之间
leadership$date <- as.Date(leadership$date, "%m/%d/%y") startdate <- as.Date("2009-01-01") enddate <- as.Date("2009-12-31") newdata <- leadership[which(leadership$date >= startdate & leadership$date <= enddate), ]使用 subset() 选择变量和观测
newdata <- subset(leadership, age >= 35 | age < 24, select=c(q1, q2, q3, q4)) newdata <- subset(leadership, gender=="M" & age > 25, select=gender:q4)使用 sample() 从数据集中抽取随机样本
mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE), ]第1个参数是由要从中抽取的元素组成的向量
第2个参数是抽取的元素数量
第3个参数表示无放回抽样
齐全的抽样工具 sampling 包
分析复杂调查数据 survey 包
使用 sqldf 包
项目主页 http://code.google.com/p/sqldf/