R語言--基本數據管理(變量、缺失值、日期值、數據類型轉換、數據框)


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,]  #選擇13

 

newdata3<-lendership[lendership$gender=="M" & lendership$age>30,]

 

4subset函數

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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM