关闭

R 语言-数据处理基础

158人阅读 评论(0) 收藏 举报

data.csv


seller.csv


###########安装包###############
#install.packages("lubridate")  包含month()
#install.packages("reshape")  包含reshape()
library(lubridate)   #?如何查找函数在哪个包
library(reshape)
install.packages("RMySQL")

#########工作空间配置##############
setwd("E:\\work\\R培训")  #可以用 / or \\
getwd()
dir.create("name")
setwd("name")
setwd("..")  
########数据输入##############
data<-read.csv("data.csv",stringsAsFactors=FALSE)
seller<-read.csv("seller.csv",stringsAsFactors=FALSE)
data
head(data)  #tail(data)
str(data)
summary(data)
nrow(data)
ncol(data)
typeof(data$name)
########类型转换##########
data$ID<-as.character(data$ID)  
#转换:as.character() as.numeric() as.data.frame() as.factor()
#判断:is.character() is.numeric() is.data.frame() is.factor()

########变量重命名######
names(data)[2]<-"product"       #colnames(data) rename()

########创建新变量############
data$money<-data$quantity*data$price  
# + - * / ^ %% 
#sum() abs() sqrt() mean() max() etc.
########缺失值处理############
data$quantity[is.na(data$quantity)]<-0 # not available
data$quantity[data$quantity==0]<-NA    
sum(data$quantity,na.rm=TRUE)  #na.rm=TRUE,计算之前移除缺失值

########条件赋值############
data$pricecat<-data$product
data$pricecat[data$price<100]<-"cheap"
data$pricecat[data$price<1000 & data$price>=100]<-"expensive"
data$pricecat[data$price>=1000]<-"very exp"
#逻辑运算符:==  != <>  &  |  

########数据集合管理############
#1.选取子集 2.数据集合并

#1.选取子集
#列
newdata<-data[c("quantity","price","money")]
newdata<-data[,4:6]
data$ID<-NULL   #删除,NULL与NA的区别
#行
newdata<-data[2:3,]
#条件
newdata<-data[which(data$pricecat=="cheap" & data$quantity>20),]
data$pricecat=="cheap"
which(data$pricecat=="cheap")     #which 返回数组下标
which(data$quantity>20)
which(data$pricecat=="cheap" & data$quantity>20)
which(data$pricecat=="cheap" | data$quantity>20) 
data[which(data$name %in% c("cup","bag")),]  # x %in% c()

newdata<-subset(data,pricecat=="cheap" & quantity>20)
#随机抽样(略)
mysample<-data[sample(1:nrow(data),3,replace=FALSE),]

#2.数据集合并
#列 merge() or cbind()
A=data
B=seller
merge(A,B,by="product")  #多个联结变量:by=c("product","ID")
#行 rbind()
rbind(A,B)
A=data[2:3,]
B=rev(data[3:5,])
rbind(A,B)
#必须拥有相同的变量,顺序可以不一致

#######数据排序#############
data<-data[order(-data$money,data$price),]
data$rank<-rank(data$cash)
#######  函数   ###############
#1.数学统计函数 2.字符处理函数 3.日期函数 4.其他常用函数 5.自编函数(略)

#1.数学统计函数(P83)
#数学:abs(x) sqrt(x) ceiling(x) floor(x) round(x,n) etc.
#统计:sum() mean() median() range() var() sd()

#2.字符处理函数
#nchar(x) substr(x,start,stop) sub(pattern,replacement,x) etc.
nchar('abcd')
nchar(c("1","3as","egty"))
length(c("1","3as","egty"))
length(data$name)
substr("abcdefg",3,6)
sub("a",".","maosiyuan")
gsub("a",".","maosiyuan")
strsplit("abc","")
paste("a","b","c",sep="_")
#大小写字符转换?

#3.日期函数
#字符串转日期
as.Date("2016-04-15") #默认yyyy-mm-dd
as.Date("15/04/2016","%d/%m/%Y")
as.Date("20160414","%Y%m%d")  #日期格式参见P73
ymd("20160414")

typeof(data$date)
as.Date(data$date,"%Y/%m/%d")
#日期转字符串
mydate<-as.Date("15/04/2016","%d/%m/%Y")
as.character(mydate)
gsub("-","",as.character(mydate))

month(mydate)   #year() day()

date()
Sys.Date()
format(Sys.Date(),format="%y")
as.Date("2016-04-15")-as.Date("2016-04-01")
difftime(as.Date("2016-04-15"),as.Date("2016-04-01"),units="hours") 
   #units:"secs", "mins", "hours","days", "weeks",不包含months years
as.numeric(as.Date("2016-04-15")-as.Date("2016-04-01"))
#4.其他常用函数
unique(data$date)  #去重
which()            #返回数组下标
which.max(data$money)
rev(data)  #反转列顺序
t(data)    #转置
match("a",c("n","s","a","d"))  #可实现Excel的vlookup功能,案例如下
seller
data
data$seller_name<-seller[match(data$product,seller$product),2]
#5.自编函数(略)
myfun<-function(x){
  if(x<100){
    result<-"cheap"
  }else if(x<1000){
    result<-"expensive"
  }else{
    result<-"very expensive"
  }
    return(result)
}
myfun(15)

###########透视表#######
seller
table(seller$name)  #计数
seller_new
aggregate(seller[,3:4],by=list(seller$name),FUN=sum,na.rm=TRUE)
#aggregate(目标值,分组变量,统计函数)

############数据集调整###########
seller
melt_data<-melt(seller,id=(c("name","product"))) #把不在id中的指标折叠起来
cast(melt_data,name~variable,sum)  #把cast(data.row~column)的column指标展开
cast(melt_data,name+product~variable)

#case
q1<-read.csv("Q1.csv",stringsAsFactors=FALSE)
str(q1)
subq1<-melt(q1,id=c("产品名称","下单渠道"))
head(subq1)
colnames(subq1)<-c("product","channel","variable","value")
subsubq1<-cast(subq1,product~channel+variable)
head(subsubq1,1)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24305次
    • 积分:502
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:3篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论