R語言練習2.0之四種方法獲取行和列

2021.9.22
中秋節(jié)后新的練習開始啦~練習用的是“nycflights13”的數(shù)據(jù)。

install.packages("nycflights13")
library(nycflights13)
nycflights13::flights
View(flights)
f<-flights
class(f)
f$r<-f$year*2   #翻譯:新加一列(列名為r),且第20列r中的值都是第1列year中值的2倍
colnames(f)
f$r

目標:學習數(shù)據(jù)選取的三種思維模式

【一】通過位置獲取

## 獲取第一行
h1<-f[1,]
l2<-f[,2]
class(l2)          #l2是從f中?。◣в行校┑牡?列,所以class后是table
# 獲取第1列
## 使用$獲取列
l3<-f$day
class(l3)          #l3是從f中把第3列的值取出,所以class后是integer(n.整數(shù))
# 選取第2到4行
h234<-f[2:4,]
# 選取第2到4列
l234<-f[,2:4]
# 選取第2到4行,3到5列
h234l345<-f[2:4,3:5]

【二】通過行名和列名獲取

## 其中行名獲取的方法十分推薦
## 但是記住一點, 行名不能重復
row<-rownames(flights)    # 返回行名
col<-colnames(flights)    # 返回列名
## 用名稱提取行
ROW235<-c(2,3,5)          #如果行名是字符串,也可以寫成(例如)ROWX<-c("chr1","chr2",...,"chrn")
row235<-f[ROW235,]        #rowx<-f[ROWX,]即可根據(jù)名稱提取行。
                          #下次試試rowx<-f[c("chr1","chr2",...,"chrn"),]
## 用名稱提取列
View(col)
col235<-f[,c("month","day","sched_dep_time")]
## 用名稱同時提取行和列
rc<-f[ROW235,c("month","day","sched_dep_time")]
rc

2021.9.23
【三】通過邏輯獲取

## 邏輯獲取,先產(chǎn)生邏輯,再返回位置,再獲取
##先產(chǎn)生邏輯
L<-f$month == "2"    #方法1,用【==""】賦予邏輯
filter(f,month==2|month==12)   #方法2,用filter()獲取行,詳見《R數(shù)據(jù)科學》第三章
table(f$month == "2")
table(f$month)
##再返回位置,再獲取
which(f$month == "2")  #獲得符合邏輯的行所對應的位置
h<-f[c(111297:136247),]   #返回位置獲取行
h<-f[f$month == "2",]     #一步到位的縮減版
## 在此基礎上可以再選擇列
hl<-f[f$month == "2",c(2,3,5)]
## 難點在于產(chǎn)生正確的邏輯值
## 有多少種方法可以產(chǎn)生邏輯值??
## 1.最重要的邏輯判斷,如比較大小
f$dep_time>600       #還可以用【>,<加數(shù)】賦予邏輯,數(shù)的兩旁不需要帶"",記不住使用方法可以Being一下~
table(f$dep_time)
## 2.函數(shù)產(chǎn)生,比如grepl,%in%
filter(f,month==2|month==12)     #用%in%簡寫見下一行
feb_dec<-filter(f,month%in%c(2,12))
JFK<-filter(f,origin%in%c("JFK"))
#關于grepl:R語言中的grepl()函數(shù)用于在向量中找到指定模式時返回值True,如果未找到則返回false。
#用法: grepl(pattern, string, ignore.case=FALSE)
#參數(shù):pattern:正則表達式模式
#參數(shù):string:要搜索的字符向量
#參數(shù):ignore.case:是否在搜索中忽略大小寫。這里 ignore.case 是一個可選參數(shù),默認設置為 FALSE。
LGA<-f[grepl("LGA",f$origin),]

注意:難點在于產(chǎn)生正確的邏輯值

【四】行列的選擇,還有一個重要的函數(shù)subset

## subset,第一個數(shù)據(jù)DataFrame,第二個選行(邏輯值),第三個是列,名稱
J<-f$origin=="JFK"
mydata2<-subset(f,f$origin=="JFK",select=c("origin","dest","distance"))
mydata3<-subset(f,f$origin=="JFK",select=c(1:10))
## 刪除列和增加列
## 刪掉第一列
mydata1<-f[,-1]
## 增加一列
mydata1$new<-LETTERS[1:336776]
mydata1$new<-c(1:336776)
## 使用位置調(diào)整順序,
## 把最后一列調(diào)整到第1列,很常用
mydata2<-mydata1[,c(20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)]
mydata3<-mydata1[,c(20,seq(1,19))]
mydata4<-mydata1[,c(20,1:19)]
#獲取名稱
colnames(mydata1)
rownames(mydata1)
## 修改部分名稱
colnames(mydata1)[3:5] <- c("dep_time1","sched_dep_time1","dep_delat1")
rownames(mydata1)[1:2] <- c("r1","r2")
###用tidyr包進行長數(shù)據(jù)和寬數(shù)據(jù)的相互轉換
##pivot_longer,數(shù)據(jù)變長,增加行
#pivot_longer()使寬數(shù)據(jù)轉換為長數(shù)據(jù)。
#其簡要用法為:pivot_longer(data, cols, names_to = "name", values_to = "value")
#參數(shù):data即為需要進行數(shù)據(jù)結構轉化的數(shù)據(jù)集。
#參數(shù):cols指定進行轉化的列,在select()函數(shù)中可以幫助指定列的"select helper"在這里也適用,可以使用負號“-”表示反向選擇。
#參數(shù):names_to:col指定的那些列的列名會組成一個新的變量,names_to指定該新變量的變量名。
#參數(shù):values_to:col指定的那些列的變量值會組成一個新的變量,values_to指定該新變量的變量名。
##pivot_wider,數(shù)據(jù)變寬,增加列(閱讀課后材料學習,使用到的數(shù)據(jù)在data文件夾)
#pivot_wider()使長數(shù)據(jù)轉換為寬數(shù)據(jù)。
#其簡要用法為:pivot_wider(data, id_cols = NULL, names_from = "name",values_from = "value")
#參數(shù):data即為需要進行數(shù)據(jù)結構轉化的數(shù)據(jù)集。
#參數(shù):id_cols指定用什么變量來識別不同觀測。不指定時默認用除names_from和values_from所指定變量之外的所有變量來識別不同觀測。
#參數(shù):names_from指定新數(shù)據(jù)集中展開的各新變量的變量名由舊數(shù)據(jù)集的哪個(或哪些)變量得到。
#參數(shù):values_from指定新數(shù)據(jù)集中展開的各新變量的變量值由舊數(shù)據(jù)的哪個(或哪些)得到。如果指定了多個值,則會求和得到新變量值。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容