資料框
資料框是指有若幹個行和列的資料集,它與矩陣類似,但是并不要求所有列都是相同的類型;資料框就是一個清單,它的每個成分都是一個向量,并且長度相同,以表格的形式展現。
資料框是有列向量組成、有着矩陣形式的清單
資料框與最常見的資料表是對應的:每列代表一個變量屬性,每行代表一條樣本資料:

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
向張敬信老師表達敬意,以上為上課内容的借鑒、收集、整理、與歸納。
學習不易,請留下你的痕迹!
點個贊,分享一下!