1 基本數據管理
1.1一個示例
(1)定義向量,造數據框
manage<-c(1,2,3,4,5)
date<-c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
country<-c("US","US","UK","UK","UK")
gender<-c("M","F","F","M","F")
age<-c(32,45,24,34,88)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)
lendership<-data.frame(manager,country,gender,age,q1,q2,q3,q4,q5)
(2)創建新變量
方法一:使用$
q6<-q4+q5
lendership$q6<-lendership$q4+lendership$q5
方法二:transform()為數據表添加列
lendership<-transform(lendership,q7=q4+q5,q8=q1+q2)
(3)變量重編碼
方式一:使用$
lendership$age[lendership$age==88]<-NA
lendership$agecat[lendership$age>50]<-"Elder"
lendership$agecat[lendership$age>40 & lendership$age<=50]<-"Middle Aged"
lendership$agecat[lendership$age<40]<-"Young"
方式二:使用within
lendership1<-within(lendership,{
agecat<-NA
agecat[age>50]<-"Elder"
agecat[age>40 & age<=50]<-"Middle Aged"
agecat[age<=40]<-"Young"
})
(4)變量重命名
方式一:彈出數據編輯器
fix(lendership)
方式二:使用names(),只能索引一列一列的改,不方便
names(lendership)[1]<-"manager1"
解釋:names里面是表名,[1]代表修改第一列
方式三:導入編輯包plyr,使用函數rename()
library(plyr)
lendership<-rename(lendership,c(manager1="ID",q1="qq1"))
2 缺失值
2.1 識別缺失值函數is.na()
y<-c(1,2,NA)
is.na(y)
2.2 重編碼某些值為缺失值
lendership$age[lendership$age==88]<-NA
2.3 缺失值參與計算會怎樣
y<-c(1,2,NA)
z<-y[1]+y[2]+y[3]
z<-sum(y,na.rm = T) #na.rm = T意思是有缺失值就移除
2.4 移除含有缺失值的觀測(行)
newdata<-na.omit(lendership) #刪除含有缺失值的行
3 日期值
3.1 日期值的讀入 as.Date
mydata<-as.Date(c("2008-06-11","2018-08-08"))
3.2 日期值的格式
strdata<-c("01/05/1996","08/22/1998")
mydata1<-as.Date(strdata,"%m/%d/%Y") #指定日期格式
3.3 系統日期與當前日期
系統日期:Sys.Date()
當前日期:date()
3.4 日期值的輸出格式
today<-Sys.Date()
format(today,format="%B %d %Y") #調整日期輸出格式format,%B表示月份文字輸出
3.5 日期值的間隔計算
方式一:按天計算
startdata<-as.Date("1996-11-22")
enddata<-as.Date("2021-07-02")
days<-enddata-startdata
方式二:按周計算,使用函數difftim()
difftime(enddata,startdata,units = "weeks")
4 類型轉換
4.1 is.xxx()函數,用來判斷類型
4.2 as.xxx()函數,用來轉換
5 數據排序
lendership2<-lendership[order(lendership$gender,lendership$age),]
6 數據集操作
數據輸入:
manage<-c(1,2,3,4,5)
date<-c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
country<-c("US","US","UK","UK","UK")
gender<-c("M","F","F","M","F")
age<-c(32,45,24,34,88)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)
lendership<-data.frame(manager,country,gender,age,q1,q2,q3,q4,q5)
leader_a<-data.frame(manage,country,gender,age)
leader_b<-data.frame(manage,q1,q2,q3,q4,q5)
leader_b<-leader_b[order(-leader_b$manage),]
6.1 數據集(框)的合並 merge()
lendership1<-merge(leader_a,leader_b,by="manage") #通過主鍵manage合並
6.2 數據集(框)取子集
(1)保留變量
方式一:newdata<-lendership[,c(5:9)]
方式二: myvar<-c("gender","country","q5")
newdata1<-lendership[myvar]
(2)刪除變量
方式一:前面加負號 -
newdata<-newdata[c(-2,-3)]
方式二:賦值NULL
newdata$q3<-NULL
(3)選入觀測(保留行)
newdata2<-lendership[1:3,] #選擇1到3行
newdata3<-lendership[lendership$gender=="M" & lendership$age>30,]
(4)subset函數
newdata4<-subset(lendership,gender=="M" & age>25,select=c("manager","gender","age"))
解釋:gender=="M" & age>25這是選擇保留的行,select是選擇保留的列
若出現了錯誤:選擇了未定義的列
修正:檢查自己的列變量名字是否寫錯
(5)使用SQL語句操作數據集(框)
加載包:library(sqldf)
語句:newdf<-sqldf("select * from mtcars where carb=1 order by mpg",row.names = T)