R語言 frame日常操作

frame簡直是R中神一般的存在,翻譯爲數據框架,和矩陣很像,但絕對比矩陣更加強大, frame可以各種數據類型雜交,簡直太方便了。下面介紹下簡單的操作,因爲。。。更深的操作我也不會,真的要靠日常積累吧。

創建frame

最基礎的,一行一行創建,這個確實有點點傻,不過做生信的寶寶,誰會自己建表呢,都是生成的數據,簡單測試而已。

 student<-data.frame(ID=c(11,12,13),Name=c("Devin","Edward","Wenli"))
 #查看一下
 student

一些基本信息查看

> student
  ID   Name
1 11  Devin
2 12 Edward
3 13  Wenli

查看列名:

> row.names(student)
[1] "1" "2" "3"

查看行名:

> colnames(student)
[1] "ID"   "Name"

#增加列
student$sex=c("b","g","b")

#增加行(新建一個表,把倆表綁定在一起,rbind是行綁定)
newstudent=data.frame(ID=c(14),Name=c("Peter"),sex=c("b"))
student=rbind(student,newstudent)

#刪除最後一行(本來有4行,取前三行,賦值給原表)
student=student[1:3,]

兩個表之間的合作

新建一個表:

home<-data.frame(ID=c(11,1,2),no=c(111,122,133))

#查找student表中是否有home表的學生(ID來區分)
sh=student[which(student$ID%in%home$ID),]
#或者按照列來匹配,student第一列和home第一列是否有交叉,有的話輸出student信息
sh=student[which(student$ID%in%home[1,]),]

#兩個表合併,按照ID合併
 result=merge(student,home,by.x = "ID")
 result
 ID  Name sex  no
1 11 Devin   b 111

查詢子集

查詢一個Date Frame,返回一個滿足條件的子集,這相當於數據庫中的表查詢,是非常常見的操作。使用行和列的Index來獲取子集是最簡單的方法,前面已經提到過。如果我們使用布爾向量,配合which函數,可以實現對行的過濾。比如我們要查詢所有Gender爲F的數據,那麼我們首先對student$Gender==“F”,得到一個布爾向量:FALSE FALSE  TRUE,然後使用which函數可以將布爾向量中TRUE的Index返回,所以我們的完整查詢語句就是:

student[which(student$Gender=="F"),]

注意這裏列Index並沒有輸入,如果我們只想知道所有女生的年齡,那麼可以改爲:

student[which(student$Gender=="F"),"Age”]

這樣的查詢寫法還是複雜了點,可以直接使用subset函數,那麼查詢會簡單些,比如我們把查詢條件改爲年齡<30的女性,查姓名和年齡,那麼查詢語句爲:

subset(student,Gender=="F" & Age<30 ,select=c("Name","Age"))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章