2016年10月12日 星期三

操作R的資料框架(Data frame)

R的資料框架(data frame),可以想像是Excel裡面的表。用無線電字母呼叫表為例:


以下粗體代表指令,Courier代表下指令後輸出的結果,中文是說明。
指令先後順序有所關聯,所以無法執行的話請從頭依序執行每一行指令

### 初始化一個空的資料框架,名稱叫做df ###
df <- data.frame(char=character(), telephony=character())

### 加入兩筆資料,注意每次都要指定加入的欄位名稱 ###
df <- rbind(df, data.frame(char="A", telephony="Alfa"))
df <- rbind(df, data.frame(char="B", telephony="Bravo"))

### 一次加入兩筆資料 ###
df <- rbind(df, data.frame(char="C", telephony="Charlie"),
                data.frame(char="D", telephony="Delta"))

### 顯示資料框架內容 ###
show(df)
  char telephony
1    A      Alfa
2    B     Bravo
3    C   Charlie
4    D     Delta

### 新增一個叫做MorseCode的欄位 ###
df["MorseCode"] <- NA

### 附加資料到新增欄位的資料框架內,注意到每個欄位都必須要給值 ###
df <- rbind(df, data.frame(char="E", telephony="Echo", MorseCode="."))
df <- rbind(df, data.frame(char="F", telephony="Foxtrot", MorseCode="..-."),
                data.frame(char="G", telephony="Golf", MorseCode="--."),
                data.frame(char="H", telephony="Hotel", MorseCode="...."))

### 把含有NA的資料給去除 ###
df1 <- na.omit(df)
show(df1)
  char telephony MorseCode
5    E      Echo         .
6    F   Foxtrot      ..-.
7    G      Golf       --.
8    H     Hotel      ....

### 新增另一個資料框架df2,一個什麼都是空的資料框架,然後再加入資料 ###
df2 <- data.frame()
df2 <- rbind(df2, data.frame(char="I", telephony="India", MorseCode=".."),
                 data.frame(char="J", telephony="Juliett", MorseCode=".---"),
                 data.frame(char="K", telephony="Kilo", MorseCode="-.-"))
show(df2)
  char telephony MorseCode
1    I     India        ..
2    J   Juliett      .---
3    K      Kilo       -.-

### 合併兩個資料框架df1與df2,產生df3。列編號會重給 ###
df3 <- rbind(df1, df2)
show(df3)
   char telephony MorseCode
5     E      Echo         .
6     F   Foxtrot      ..-.
7     G      Golf       --.
8     H     Hotel      ....
51    I     India        ..
61    J   Juliett      .---
71    K      Kilo       -.-

### 根據MorseCode這個欄位來排序 ###
df3[with(df3, order(MorseCode)), ]
   char telephony MorseCode
7     G      Golf       --.
71    K      Kilo       -.-
5     E      Echo         .
61    J   Juliett      .---
51    I     India        ..
6     F   Foxtrot      ..-.
8     H     Hotel      ....

更多關於資料框架參閱《Introduction to R》的Data frames節
¡¡ 資料框架(Data frame)列表(List)或是矩陣(Matrix)是不一樣的,使用rbind加入新的資料的時候,若是發現怎樣都塞不進去,有可能就是混淆了這些資料結構 !!

_EOF_

2 則留言:

  1. 你好,假設我在建立一個空的data frame時,
    其中一欄所要填入的值她的類型屬性是"POSIXct" "POSIXt"
    該如何填入她的屬性

    回覆刪除
    回覆
    1. 這我沒有試過,不知道怎麼做喔~

      刪除