显示标签为“R”的博文。显示所有博文
显示标签为“R”的博文。显示所有博文

2013年9月23日星期一

R :通过 cut + ggplot 迅速画出 按时段 week / month 统计图

见:Plot Weekly or Monthly Totals in R

切 week / month :

log$Month <- as.Date(cut(log$Date,  breaks = "month"))

log$Week <- as.Date(cut(log$Date,  breaks = "week",  start.on.monday = FALSE))

统计并画图:

ggplot(data = log,
  aes(Month, Quantity)) +
  stat_summary(fun.y = sum, # adds up all observations for the month
    geom = "bar") + # or "line"
  scale_x_date(
    labels = date_format("%Y-%m"),
    breaks = "1 month") # custom x-axis labels


用ggplot2画折线图、面积图、直方图等等,笔记:chart_example

2012年11月1日星期四

R语言数据操作:笔记 chap 9

添加计算的新列:
somedata = transform(somedata, logval = log(val))

划分值域:
sepal = cut(data$length, c(1,5,9,10), include.lowest=TRUE,right=FALSE)

car包,对变量重新编码:
newgroup = recode(group, 'c(1,5)=1; c(2,4)=2; else=3')

stack函数重排数据
data1 data2 data3   =>  values ind (其中ind取值为data1/data2/data3)

unstack转换回来
mydata = unstack(sdata, values~ind)

reshape包:

# obs: subj, time, x, y

mobs = melt(obs)

cast(subj ~ variable + time , data=mobs)

#subj  x_1 x_2 x_3 y_1 y_2 y_3


#后面1-3取值为time的值


cast(subj ~ variable | time, data=mobs)

# $'1' : subj  x y


# $'2' : subj x y


# $'3' :  subj x y


#按time分组


cast(subj ~ variable + time , subset = variable == 'x', data=mobs)

#只取出x的数据,不取y的


 

合并
merge(x,y,all=TRUE)

merge(x,y,all.x=TRUE)

merge(x,y,by.x=cola,by.y=colb)ch(x

找出匹配值的索引
indices = match(x$a, y$a, nomatch=0)

y$a[indices]

2012年10月31日星期三

R语言数据操作:笔记 chap 8

按地区划分收入高于和低于收入中位数的州的数量:
hiinc = state.x[ , 'income' ] > median(state.x[ , 'income' ])

stateinc = table(state.region , hinnc)

#f_stateinc 共三列:state.region, hinnc, freq(频数)

f_stateinc = as.data.frame(stateinc)

按各列取值去重,算频数:
as.data.frame( table(x) )

添加行合计/列合计:
tt = table(infert$edu, infert$partity)

addmargins(tt,c(1,2))

频率统计:prop.table

按列计算:
sumfun = function(x) c(n=sum(!is.na(x)), mean = mean(x), sd=sd(x))

x = apply(somedata, 2, sumfun)

矩阵每一列除以该列的最大值:
maxes = apply(somedata,2,max)

final = sweep(somedata,2,maxes,"/")

按time和diet分组,求weight的均值:
cweights = aggregate(data$weight,data[c('time','diet')], mean)

cweights = tapply(data$weight, data[c('time', 'diet')], mean)



mclick = melt(somedata, measure.var = 'weight')

cast(mclick, diet + time ~ variable, mean)

reshape包

以region为行,求各变量的均值
cast(somedata,region~variable,mean)

以每个变量为一行
cast(somedata,variable~region,mean)

指定变量子集
cast(somedata, region~variable, mean, subset=variable %in% c('population', 'life'))

求各列变量均值、中位数、标准差
cast(somedata, variable~., c(mean,median,sd))

按region汇总各列变量均值、中位数、标准差
cast(somedata, region~variable, c(mean,median,sd))

2012年10月30日星期二

R语言数据操作:笔记 chap 1 - chap 7

辨认缺失值:is.na

删除带有缺失值的行:na.omit

当所有读入的数据为同一模式时,用scan函数读取较快

read.fwf 读取固定宽度的文件

index = which(veg$va == 2 & veg$vb >=3)

访问mysql:RMySQL

时间窗:range(rdates$Date)

时间间隔:difftime

时间序列:seq(as.Date('1976-7-4'),by='days',length=10)

将字符取值映射为数值取值,可指定是否按顺序:

mons = c ("Mar", "Feb","Jan")

mons = factor(mons, levels=c("Jan", "Feb", "Mar"), ordered=TRUE)

InsectSpray数据框,包含6种喷剂spray(A-F)处理后昆虫的数量count,要根据spray分组求count均值,再按均值大小升序排列spray

InsectSpray$spray = with(InsectSpray, reorder(spray,count,mean))

cut 将数值变量转换成因子:cut(women$weight,3,labels=c('low','med','high'))

时间序列: days = seq(from=as.Date('2012-10-11'), to=as.Date('2012-10-21'),by='day')

按flow升序: new <- old[ order( old[,'flow'] ) , ]

取满足条件的子集中指定的列:subset(dd, b>10,select=c(cola,colb) )

cat 打印输出字符串

按条件拆分字符串(支持正则): strsplit(somestr, ' ')

替换 gsub

R语言初学者指南:笔记

c, cbind, rbind

dfrm <- data.frame(WC = wincrd,TS=tarsus)

dfrm$WC

read.table

取符合某个条件的行:somedata[ somedata$somecol==1, ]

取符合多个条件的行(或):somedata[ somedata$somecola==1 | somedata$somecolb==2 | somedata$somecolc==3, ]

取符合多个条件的行(与):somedata[ somedata$somecola==1 & somedata$somecolb==2 &somedata$somecolc==3, ]

取第六列:somedata[ , 6]

合并:merge

write.table

排序:order

根据B分组计算A的均值:tapply(veg$a, veg$b, mean)

按列求第5-9列元素的均值,输出值为向量:sapply(veg[,5:9], FUN=mean)

按列求第5-9列元素的均值,输出值为列表:lapply(veg[,5:9], FUN=mean)

根据指定条件分组计数:table(deer$sex, deer$year)

z <- function(x,y) {}

连接字符串 paste("a","b", sep=" ")


y <- ifelse(x < 1, -1, 1)  相当于 y <- sign(x - 1)

x <- 10:1 ; x %in% c(4:6) 检查在x数组中取值在c(4,6)集合内的元素 

2012年6月7日星期四

数据实测:切比雪夫不等式

wiki介绍:切比雪夫不等式
切比雪夫不等式,对任何分布形状的数据都适用。一般而言,切比雪夫不等式給出的上界已無法改進。
也就意味着,这边给出的上界不大可能精确逼近,只是估算。

拿实际数据测了一把:

不等式估算的上界与实际数据计算出来的比例差了0.1:


> p_che

[1] 0.1111111

> p_real
[1] 0.007025371
> p_delta
[1] 0.1040857

 一图胜千言,还是要针对数据分布来选合用的估算方案,只有上界hold不住的