lecture
website icon
新增變數
資料檢視 命名編碼 新增變數 資料合併 資料篩選 遺漏值 資料加權
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹新增變數、在R的工作環境中進行變數運算及轉換,使用到的指令包含:

Facebook Icon Twitter Icon LinkedIn Icon LINE Icon

分析過程中有時候需要透過現有的變數作加減乘除,以便創造另外一個新變數。例如成績加總等。這裡一樣以class.RData當範例來說明。

新增變數

class當中只有name、gender、height三個變數。先透過c()指令增加weight變數:

> weight<-c(51,85,75,44,60,47,56,53,64,69)

當然也可以直接用fix()開啟資料編輯器新增:

> fix(class)
> class
     name gender height weight
1   Ariel      F    168     51
2   Kevin      M    188     85
3   Lewis      M    182     75
4   Sarah      F    156     44
5  George      M    170     60
6   Linda      F    158     47
7    Anne      F    171     56
8    Emma      F    160     53
9   Roger      M    168     64
10  Bruce      M    174     69

變數運算

假設要計算每個人的BMI(身體質量指數),可以直接在R利用「體重/身高(公尺)2」計算公式,新增一個BMI變數:

> BMI<-class$weight/(class$height/100)^2
> BMI
[1] 18.06973 24.04934 22.64219 18.08021 20.76125 18.82711 19.15119 20.70312
[9] 22.67574 22.79033

再編碼

可以透過R的基本運算功能,將BMI區分為體重過輕、正常體位、體重過重3個尺度:

> BMI_health<-c("") #宣告一個新的BMI_health變數
> BMI_health[BMI<18.5]<-0 #宣告BMI<18.5編碼為0
> BMI_health[BMI>=18.5 & BMI<24]<-1 #宣告18.5≦BMI<24編碼為1
> BMI_health[BMI>=24]<-2 #宣告BMI≦24編碼為2
> table(BMI_health)
BMI_health
0 1 2 
2 7 1 

利用ordered()配合levels()將數值標籤化:

> BMI_health<-ordered(BMI_health, levels=c(0,1,2), labels=c("uderweight","normal","overweight"))
> table(BMI_health)
BMI_health
uderweight     normal overweight
         2          7          1

虛變數

如果要設定虛變數,可以善用ifelse()指令,配合psych套件裡的dummy.code()。

變數只分兩個層級

當變數只分為兩個層級,例如性別分為男或女,可以直接用ifelse()先設定0、1,再用dummy.code()指令設定虛變數。

> library(psych)
> gender_dummy<-ifelse(class$gender=="M", 0, 1)
> class<-cbind(class, gender_dummy)
> class$gender_dummy<-dummy.code(class$gender_dummy)
> class
     name gender height weight BMI_health gender_dummy.0 gender_dummy.1
1   Ariel      F    168     51 uderweight              0              1
2   Kevin      M    188     85 overweight              1              0
3   Lewis      M    182     75     normal              1              0
4   Sarah      F    156     44 uderweight              0              1
5  George      M    170     60     normal              1              0
6   Linda      F    158     47     normal              0              1
7    Anne      F    171     56     normal              0              1
8    Emma      F    160     53     normal              0              1
9   Roger      M    168     64     normal              1              0
10  Bruce      M    174     69     normal              1              0

變數超過兩個層級

當變數層級大於2的時候,例如BMI分為過輕、正常、過重,先用as.data.frame()將變數轉換為資料集,再用dummy.code()指令設定虛變數。

> BMI_health_dummy<-as.data.frame(dummy.code(class$BMI_health))
> class<-cbind(class, BMI_health_dummy)
> class
     name gender height weight BMI_health gender_dummy.0 gender_dummy.1 normal uderweight overweight
1   Ariel      F    168     51 uderweight              0              1      0          1          0
2   Kevin      M    188     85 overweight              1              0      0          0          1
3   Lewis      M    182     75     normal              1              0      1          0          0
4   Sarah      F    156     44 uderweight              0              1      0          1          0
5  George      M    170     60     normal              1              0      1          0          0
6   Linda      F    158     47     normal              0              1      1          0          0
7    Anne      F    171     56     normal              0              1      1          0          0
8    Emma      F    160     53     normal              0              1      1          0          0
9   Roger      M    168     64     normal              1              0      1          0          0
10  Bruce      M    174     69     normal              1              0      1          0          0