天天看點

R語言學習筆記——資料結構(2)(資料框)資料框

資料框

資料框是指有若幹個行和列的資料集,它與矩陣類似,但是并不要求所有列都是相同的類型;資料框就是一個清單,它的每個成分都是一個向量,并且長度相同,以表格的形式展現。

資料框是有列向量組成、有着矩陣形式的清單

資料框與最常見的資料表是對應的:每列代表一個變量屬性,每行代表一條樣本資料:

R語言學習筆記——資料結構(2)(資料框)資料框

1、資料框的建立

data.frame()  #用函數建立
           
>sjk<-data.frame(
  Name=c("Ken","Ashley","Jennifer"),
  Gender=c("Male","Female","Female"),
  Age=c(24,25,23),
  Major=c("Finance","Statistics","Computer Science"))
> sjk

      Name Gender Age            Major
1      Ken   Male  24          Finance
2   Ashley Female  25       Statistics
3 Jennifer Female  23 Computer Science

#修改行名和列名

> rownames(sjk)<-letters[1:3]        #修改行名
> colnames(sjk)<-c("N","G","A","M")  #修改列名
> sjk
         N      G  A                M
a      Ken   Male 24          Finance
b   Ashley Female 25       Statistics
c Jennifer Female 23 Computer Science
> names(sjk)<-c("Name","Gender","Age","Major")  #修改列名還可以用names()
> sjk
      Name Gender Age            Major
a      Ken   Male  24          Finance
b   Ashley Female  25       Statistics
c Jennifer Female  23 Computer Science
           

可以将清單、矩陣轉換為資料框:

> A<-list(x=c(1,2,3),y=c("a","b","c"))
> A
$x
[1] 1 2 3
$y
[1] "a" "b" "c"

> data.frame(A)   #将清單轉換成資料框
  x y
1 1 a
2 2 b
3 3 c

> B<-matrix(c(1,2,3,4,5,6,7,8,9),nrow = 3,byrow=FALSE)
> B
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> data.frame(B)       #将矩陣轉換成資料框
  X1 X2 X3
1  1  4  7
2  2  5  8
3  3  6  9
           

data.frame() 建立 和 轉化資料框

as.data.frame() 轉化資料框

2、提取資料框的元素、子集

(1)以清單的方式提取

将資料框看作是有向量組成的清單,則可以沿用清單的操作方式來提取元素或者建構子集。

符号 提取的方式
$ 提取某一列的值
[] 按位置進行提取
>df1<-data.frame(
  id=1:4,
  x=c(0,2,1,-1),
  y=c(0.5,0.2,0.1,0.5))
> df1
    id  x   y
1  1  0 0.5
2  2  2 0.2
3  3  1 0.1
4  4 -1 0.5

> df1$x
[1]  0  2  1 -1
> df1[1]
  id
1  1
2  2
3  3
4  4
> df1[1:2]
  id  x
1  1  0
2  2  2
3  3  1
4  4 -1
> df1[c(TRUE,FALSE,TRUE)]
  id   y
1  1 0.5
2  2 0.2
3  3 0.1
4  4 0.5
           

(2)以矩陣方式提取

以清單形式操作并不支援行選擇。以矩陣形式操作更加靈活,若将資料框看作矩陣,其二維形式的存取器可以很容易地擷取一個自己的元素,若同時支援列選擇和行選擇。

[i,j]的形式來定行定列提取

[ , ]中可以是數值向量、字元向量、邏輯向量

#提取列

> df1[,"x"]   
[1]  0  2  1 -1
> df1[,c(2,3)]
   x   y
1  0 0.5
2  2 0.2
3  1 0.1
4 -1 0.5

#提取行

> df1[1:3,]
  id x   y
1  1 0 0.5
2  2 2 0.2
3  3 1 0.1

#提取行和列

> df1[1:2,"y"]
[1] 0.5 0.2
> df1[1:3,c("x","y")]
  x   y
1 0 0.5
2 2 0.2
3 1 0.1
           

以矩陣的形式操作會自動簡化結果,若提取一列結果就不再是資料框的形式,而是一個向量,若要保留資料框的形式可以設定參數drop=FALSE.

(3)根據條件篩選資料

> df1
  id  x   y
a  1  0 0.5
b  2  2 0.2
c  3  1 0.1
d  4 -1 0.5
> df1$y>=0.5  #将df1資料框的y列是否滿足>=0.5的條件
[1]  TRUE FALSE FALSE  TRUE
> df1[df1$y>=0.5,c("x","y")] 
   x   y
a  0 0.5
d -1 0.5
> ind<-rownames(df1)%in%c("a","d","k")  #df1中行名包括在c("a","d","k")中的
> df1[ind,c("x","y")]  #滿足ind的條件的,并且在x和y列中的資料提取出來
   x   y
a  0 0.5
d -1 0.5
           

3、給資料框指派

給資料框指派就是選擇要指派的位置,再準備同樣好同樣大小格式比對的資料,指派給那些位置即可,同樣有清單方式和矩陣方式。

(1)以清單的方式進行指派

> df1
  id  x   y
a  1  0 0.5
b  2  2 0.2
c  3  1 0.1
d  4 -1 0.5

#以$進行指派

> df1$y<-c(0.6,0.3,0.2,0.4)
> df1
  id  x   y
a  1  0 0.6
b  2  2 0.3
c  3  1 0.2
d  4 -1 0.4
> df1$w<-df1$x+df1$y
> df1
  id  x   y    w
a  1  0 0.6  0.6
b  2  2 0.3  2.3
c  3  1 0.2  1.2
d  4 -1 0.4 -0.6

#以[]的方式進行指派

> df1["z"]<-c(0.8,0.5,0.2,0.4)
> df1
  id  x   y    w   z
a  1  0 0.6  0.6 0.8
b  2  2 0.3  2.3 0.5
c  3  1 0.2  1.2 0.2
d  4 -1 0.4 -0.6 0.4
> df1[c("y","z")]<-list(level=c(1,2,1,0),                           score=c(0.1,0.2,0.3,0.4))
> df1
  id  x y    w   z
a  1  0 1  0.6 0.1
b  2  2 2  2.3 0.2
c  3  1 1  1.2 0.3
d  4 -1 0 -0.6 0.4
           

(2)以矩陣的方式進行指派

> df1[1:3,"y"]<-c(-1,0,1)
> df1
  id  x  y    w   z
a  1  0 -1  0.6 0.1
b  2  2  0  2.3 0.2
c  3  1  1  1.2 0.3
d  4 -1  0 -0.6 0.4
> df1[1:2,c("y","z")]<-list(level=c(0,0),
                         score=c(0.9,1.0))
> df1
  id  x y    w   z
a  1  0 0  0.6 0.9
b  2  2 0  2.3 1.0
c  3  1 1  1.2 0.3
d  4 -1 0 -0.6 0.4
           

向張敬信老師表達敬意,以上為上課内容的借鑒、收集、整理、與歸納。

學習不易,請留下你的痕迹!

點個贊,分享一下!

繼續閱讀