## 創建leadership數據框 manager <- 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 ...
## 創建leadership數據框 manager <- 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,25,39,99) 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) leadership <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE) leadership
##創建新變數 leadership <- transform(leadership,q6=q1+q2,q7=(q1+q2)/2)
##變數的重編碼 leadership <- within(leadership,{ agecat <- NA agecat[age>75] <- "Elder" agecat[age >=55 & age <=75] <- "Middle Aged" agecat[age <55] <- "Young"}) leadership
##變數的重命名 install.packages("plyr") library(plyr) leadership <- rename(leadership, c(manager="managerID",date="testDate")) leadership
##缺失值 缺失值是不可比較的 缺失數據需在分析前重新編碼為缺失值 is.na(leadership[,6:10])
##在分析中排除缺失值 含有缺失值的算術表達式和函數的計算結果也是缺失值 sum(q4,na.rm=T)
## na.omit()移除所有含有缺失值的觀測 leadership mydata <- na.omit(leadership) mydata
##日期值 as.Date()函數 將以字元串形式輸入R中的日期值轉化為以數值形式存儲的日期變數 myformat <- "%m/%d/%y" leadership$testDate <- as.Date(leadership$testDate,myformat) leadership Sys.Date()#返回當天的日期 date()#返回當前的日期和時間 DOB <- as.Date("1997-08-21") today <- Sys.Date() difftime(today,DOB,units="weeks")
##類型轉換 is.datatype() 允許根據數據的具體類型加以不同的方式處理 as.datatype() 分析前先將數據進行轉化
##數據排序 order() 預設的排序順序--升序 在排序變數前加一個減號即可得到降序的排序結果 newdata <- leadership[order(leadership$age),] newdata
##數據集的合併 向數據框添加列 cbind() #不需要一個公共索引 向數據框添加行 rbind() #註意多餘變數的處理 merge(dataframeA,dataframeB,by="") #橫向合併,通過一個或多個共有變數進行聯結
##數據集取子集 選入(保留)變數、剔除(丟棄)變數 #邏輯向量&比較運算符 選入觀測 #subset()函數 newdata <- subset(leadership, age >= 35 | age < 24, select=q1:q4) newdata
隨機抽樣:從數據集中(有放回或無放回地)抽取大小為n的一個隨機樣本 #sample()函數 mysample <- leadership[sample(1:nrow(leadership),3,replace=F),] mysample
練習題
一.將1、2、...20構成兩個5*4階的矩陣,其中矩陣A是按列輸入,矩陣B按行輸入
1. 將A和B按照行合併;
2. 將A和B轉化為數據框DA和DB,並將他們的列命名為("ID","A1","A2","A3");
3. 以”ID”為條件將DA和DB進行匹配;
4. 在DA中選取“A2”列大於12且小於15的子集。
A=matrix(1:20,nrow=5,byrow=F) A B=matrix(1:20,nrow=5,byrow=T) B
#(1) rbind(A,B)
#(2) colnames(A)=c("ID","A1","A2","A3") DA=data.frame(A) DA colnames(B)=c("ID","A1","A2","A3") DB=data.frame(B) DB
#(3) merge(DA,DB,by="ID")
#(4) newdata=subset(DA,A2>12&A2<15,select=ID:A3) newdata
二.隨機生成服從均值為2,標準差為3的正態分佈的長度為5的向量x
- 將x降序排列,生成向量y
- 採用有放回抽樣的方式從y中抽取3個元素
- 採用不放回抽樣的方式,以概率prob=c(0.1,0.05,0.2,0.5,0.15)從中抽取3個元素。
#均值為2,標準差為3,長度為5的正態分佈 x = rnorm(5,2,3) x
#(1) y=x[order(-x)] y
#(2) y[sample(1:5,3,replace=T)] y
#(3) y[sample(1:5,3,replace=F,prob=c(0.1,0.05,0.2,0.5,0.15))] y