R語言第三、四章學習心得
一、整體計劃按時完成
二、猴子老師布置的任務已完成
簡單數據處理和分析:朝陽醫院2016年銷售數據.xlsx
首先,安裝「openxlsx」包,讀取表格
數據預處理:
Step1:列名重命名
Step2:刪除缺失數據
Step3:處理日期
Step4:數據類型轉換
Step5:數據排序
業務指標1:月均消費次數=總消費次數/月份數
注意:總消費次數中同一天內同一個人發生的所有的消費算作一次消費
總消費次數:
Ps:老師ppt課件中算出來的總消費次數是5394,但是自己算出來的是5398,一開始以為是自己算錯了,還進行了反向驗證,反過來計算表格總行數6577,重複數1179,非重複數=6577-1179-5938,證明自己算的結果也沒錯。之後問老師,老師說數據有修改,以實際運算結果為準,哈哈哈哈原來不是自己計算錯誤,瞬間開心了~
月份數:
這裡提示%/%對"difftime"對象不適用,將difftime轉換為numeric
月均消費次數=總消費次數/月份數
業務指標2:月均消費金額=總消費金額/月份數
業務指標3:客單價=總消費金額/總消費次數
業務指標4:消費趨勢
計算每周的消費金額---分組函數tapply----繪製曲線圖----Plot
【簡單數據處理分析總結】
- 讀取Excel數據
- 數據預處理的步驟
- 數據分析
數據預處理總結:
Step1:列名重命名
Step1:刪除缺失數據
Step3:處理日期
Step4:數據類型轉換
Step5:數據排序
三、第四章主要知識點
1、創建新變數:變數名<-表達式,transform()
> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))
> mydata
x1x2
1 2 3
2 2 4
3 6 2
4 4 8
>mydata<-transform(mydata,sumx=x1+x2,means=(x1+x2)/2)
> mydata
x1x2 sumx means
1 2 3 5 2.5
2 2 4 6 3.0
3 6 2 8 4.0
4 4 8 12 6.0
2、變數的重編碼
邏輯運算符:>,<,>=,<=,==,!=,&,|,!(大於,小於,大於等於,小於等於,等於,不等於,與,或,非。)
>leadership<-within(leadership,{agecat<-NA
+ agecat[age>75]<-"Elder"
+agecat[age>=55&age<=75]<-"Middle Aged"
+agecat[age<55]<-"Young"})
> leadership
managerID testDate country gender age q1 q2 q3 q4 q5 agecat
1 1 10/24/08 US M 32 5 4 5 5 5 Young
2 2 10/28/08 US F 45 3 5 2 5 5 Young
3 3 10/1/08 UK F 25 3 5 5 5 2 Young
4 4 10/12/08 UK M 39 3 3 4 NA NA Young
5 5 5/1/09 UK F NA 2 2 1 2 1 <NA>
3、變數重命名
方法一:fix(leadership)
方法二:names()函數
>names(leadership)[2]<-"testData"
> leadership
方法三:plyr包中的rename()函數
leadership<-rename(leadership,c(manager="managerID",teseDate="testDate"))
leadership
4、缺失值:is.na()函數,檢測缺失值是否存在
>is.na(leadership[,6:10])
重編碼某些值為缺失值:
>leadership$age[leadership$age==99]<=NA
在分析中排除缺失值:
na.rm=TRUE,可以在計算前移除缺失值並使用剩餘值進行計算
x<-c(1,2,NA,3)
y<-sum(x,na.rm=TRUE)
na.omit(),刪除左右含有缺失值數據的行
>leadership
>newdata<-na.omit(leadership)
>newdata
5、日期值:as.Date(),語法:as.Date(x,」input_format)
日期格式:
Sys.Date(),返回當天的日期
Date(),返回當前的日期和時間
> Sys.Date()
[1] "2017-03-29"
> date()
[1] "Wed Mar 29 21:35:56 2017"
可以使用format(x,format=」output=」output_format」)來輸出指定格式的日期值,並可以提取日期值中的某些部分:
> today<-Sys.Date()
> format(today,format="%B %d%Y")
[1] "三月 29 2017"
> format(today,format="%A")
[1] "星期三"
> startdate<-as.Date("2004-02-13")
> enddate<-as.Date("2011-01-22")
> days<-enddate-startdate
> days
Time difference of 2535 days
也可以使用函數difftime()來計算時間間隔,並以星期、天、時、分、秒來表示:
> today<-Sys.Date()
> dob<-as.Date("1956-10-12")
> difftime(today,dob,units="weeks")
Time difference of 3154.714 weeks
※星期幾齣生呢?
>today<-as.Date("1992-09-18")
>format(today,format="%A")
[1] "星期五"
將日期轉換為字元型變數:as.character()
strDates<-as.character(dates)
6、類型轉換
判斷 含義 轉換
is.numeric() 數值型數據 as.numeric()
is.character() 字元型數據 as.character()
is.vector() 向量數據 as.vector()
is.matrix() 矩陣數據 as.matrix()
is.data.frame() 數據框數據 as.data.frame()
is.factor() 因子數據 as.factor()
is.logical() 邏輯型數據 as.logical()
> a<-c(1,2,3)
> a
[1] 1 2 3
> is.numeric(a)
[1] TRUE
> is.vector(a)
[1] TRUE
> a<-as.character(a)
> a
[1] "1" "2" "3"
> is.numeric(a)
[1] FALSE
> is.vector(a)
[1] TRUE
> is.character(a)
[1] TRUE
7、數據排序:order()函數,默認升序排列,加「-」即降序排列
※升序(方法一:attach)
???attach提示以下向量被掩蓋,但是結果是正確的,還在百度原因中
(方法二:with)
※降序
8、數據集的合併
橫向合併:merge(),通過一個或多個共有變數進行聯結。
cbind(),直接橫向合併兩個矩形或數據框,不需要指定公共索引
縱向合併:rbind(),注意:兩個數據框必須相同的變數,否則會出現以下提示:
把向量名稱改為一致後,可得出結果:
9、選入(保留)向量:3種方法
剔除(丟棄)向量:三種方法
在某一列的下標前加一個減號(-)就會剔除那一列:
選入觀測:三種方法:傳統法+attach+withsubset()
隨機抽樣:sample()10、使用SQL語句操作數據框
首先安裝包:install.packages("sqldf")
???運行sqldf包後,提示載入需要的程輯包:gsubfn、載入需要的程輯包:proto
載入需要的程輯包:RSQLite,但是結果還是可以運行的。
四、感想
- 現在還只能按照老師寫的代碼,自己一個個敲,希望在今後的日子裡通過自己多加練習,爭取早早不看視頻不看ppt自己能敲代碼出來;
- 敲代碼時一定一定要細心謹慎,目前大多數代碼運行錯誤,都是由於自己敲錯代碼了(大小寫混了、字母拼錯...),今後一定要多加多加多加註意。
推薦閱讀: