将数据标准化或中心化
#标准化,减去均值再除以均方根,scale设为FALSE的时候是中心化,也就不除均方根
scmean <- scale(allmean[,2:17], center = TRUE, scale = TRUE)
求第2列的方差、平均值
sd(data[,2])
mean(data[,2])
简单分类统计
引入plyr包
library(plyr)
按pic列和audios列分类统计
count(data1, c(data1$pic,data1$audios))
按pic列分类,对reposts_count列求和,计算带有不同图片数的转发次数和
a <- aggregate(data$reposts_count, data[13], sum) #data[13]为pic_num列
求带1、2、3等不同图片数的微博的平均reposts_count数
ave_count <- (a$x)/(count(data$pic_num)$freq)
将得到的新列添加至原有表中,并绘图
a <- cbind(a$pic_num,round(ave_count,0)) #round保留0个小数
a <- data.frame(a) #如果要plot,则要先转换成数据框
plot(a$pic_num,a$ave_reposts_count)
利用aggregate函数根据某列值分组,对多列求平均
根据第5列值分组,对5至11列应用foo函数,foo函数的作用是求平均值并保留小数点后2位
foo <- function(x){a<- mean(x);a<-round(a,2);return(a)}
part2 <-aggregate(c[5:11], by=list(sample=c[,5]), foo)
利用apply函数进行数据初步分类统计并绘制频数分布直方图
i = c(4,5,6,9,12,13,14,15,16,17,18,19) #i存储需要处理的列数
apply(data[,i],2,mean) #对第i列以列的方式求平均数
apply(data[,i],2,summary)
par(mfrow=c(2,3)) #把画布分为两行三列,mfrow表示以行优先填充
a <- i[1:6];b <- i[7:15]
names(data[2]) #获取第二列的索引名
for(i in a) {hist(sort(data[,i]), col='lightblue',main=paste('The distribution of ',names(data[i])),ylab="count",xlab=names(data[i]),labels=TRUE,xlim=c(0,200000),ylim=c(0,3000));+
plot(density(data[,i]),main='',xlab='',ylab='',xaxt='n',yaxt='n')} #循环绘制hist密度分布图
apply和lapply常遇错误
#apply常发生dim(X)的值必需是正数,
dimnames(x)[[1]] <- letters[1:8]
#lapply常用于数组
foo <- function(x){if(x!=0){round(log(x),0)}else{x=x}} #不加else的内容,对数组lapply时,x=0时经过此函数x将转换成null
topic <- unlist(lapply(data$topic,foo))