March 6, 2017

資料讀取

新手常見問題:資料選取與修改

選取部分資料1:row

選取所有數值為10的資料

在RSudio中觀察

1.整數索引:指定選取的位置

data[c(4,17,30,43), ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10

2.邏輯索引:指定選取數值為10的資料

data[data$數值 == 10, ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10
data$數值 == 10
##  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [34] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

data$數值 == 10
##  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [34] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

可將這個向量(邏輯測試結果)儲存起來

test <- data$數值 == 10
test
##  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
## [34] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

data[test, ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10
data[data$數值 == 10, ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10

在需要用比較複雜的邏輯處理時,可用此方法讓程式變得較好閱讀

選取部分資料2:column

選取所有數值為10的資料,且只保留花色與數值這兩欄

在RSudio中觀察

1.整數索引:指定選取的位置

data[c(4,17,30,43), c(2,3)]
##    花色 數值
## 4  黑桃   10
## 17 梅花   10
## 30 方塊   10
## 43 紅心   10

比較一下差異

data[c(4,17,30,43), ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10

如果要選取連續的列或欄可以這樣寫

data[c(3:6), c(2:3)]
##   花色 數值
## 3 黑桃   11
## 4 黑桃   10
## 5 黑桃    9
## 6 黑桃    8

比較一下差異

data[c(3:6), c(2,3)]
##   花色 數值
## 3 黑桃   11
## 4 黑桃   10
## 5 黑桃    9
## 6 黑桃    8

2.邏輯索引 搭配 3.名稱索引

data[data$數值 == 10, c("花色","數值")]
##    花色 數值
## 4  黑桃   10
## 17 梅花   10
## 30 方塊   10
## 43 紅心   10

比較一下差異

data[data$數值 == 10, ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10

修改資料1:利用新的資料覆蓋舊的值

剛剛做的事情對Global環境的影響

在RSudio中觀察

首先先複製一份一樣的資料

data1 <- data

接下來將會使用data1做修改,修改後的結果可以與data對照

將所有數值為10的資料,用14代替

在RSudio中觀察

修改資料的方法

與選取資料相同:

  • 先明確描述想替換的值

  • 再用新的值覆蓋

先明確描述想替換的值,再用新的值覆蓋

data1[c(4,17,30,43), c("數值")]
## [1] 10 10 10 10
data1[c(4,17,30,43), c("數值")] <- c(14,14,14,14)

data[c(4,17,30,43), ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10
data1[c(4,17,30,43), ]
##    牌面 花色 數值
## 4   ten 黑桃   14
## 17  ten 梅花   14
## 30  ten 方塊   14
## 43  ten 紅心   14

修改資料2:增加新的變數

data2 <- data #製作一個複本以便觀察
data2$new <- c(1) #增加新的變數
data2 #觀察增加新變數後的資料
##     牌面 花色 數值 new
## 1   king 黑桃   13   1
## 2  queen 黑桃   12   1
## 3   jack 黑桃   11   1
## 4    ten 黑桃   10   1
## 5   nine 黑桃    9   1
## 6  eight 黑桃    8   1
## 7  seven 黑桃    7   1
## 8    six 黑桃    6   1
## 9   five 黑桃    5   1
## 10  four 黑桃    4   1
## 11 three 黑桃    3   1
## 12   two 黑桃    2   1
## 13   ace 黑桃    1   1
## 14  king 梅花   13   1
## 15 queen 梅花   12   1
## 16  jack 梅花   11   1
## 17   ten 梅花   10   1
## 18  nine 梅花    9   1
## 19 eight 梅花    8   1
## 20 seven 梅花    7   1
## 21   six 梅花    6   1
## 22  five 梅花    5   1
## 23  four 梅花    4   1
## 24 three 梅花    3   1
## 25   two 梅花    2   1
## 26   ace 梅花    1   1
## 27  king 方塊   13   1
## 28 queen 方塊   12   1
## 29  jack 方塊   11   1
## 30   ten 方塊   10   1
## 31  nine 方塊    9   1
## 32 eight 方塊    8   1
## 33 seven 方塊    7   1
## 34   six 方塊    6   1
## 35  five 方塊    5   1
## 36  four 方塊    4   1
## 37 three 方塊    3   1
## 38   two 方塊    2   1
## 39   ace 方塊    1   1
## 40  king 紅心   13   1
## 41 queen 紅心   12   1
## 42  jack 紅心   11   1
## 43   ten 紅心   10   1
## 44  nine 紅心    9   1
## 45 eight 紅心    8   1
## 46 seven 紅心    7   1
## 47   six 紅心    6   1
## 48  five 紅心    5   1
## 49  four 紅心    4   1
## 50 three 紅心    3   1
## 51   two 紅心    2   1
## 52   ace 紅心    1   1

修改資料3:刪除原有變數

data3 <- data #製作一個複本以便觀察
data3$數值 <- NULL #刪除原有變數
data3 #觀察刪除原有變數後的資料
##     牌面 花色
## 1   king 黑桃
## 2  queen 黑桃
## 3   jack 黑桃
## 4    ten 黑桃
## 5   nine 黑桃
## 6  eight 黑桃
## 7  seven 黑桃
## 8    six 黑桃
## 9   five 黑桃
## 10  four 黑桃
## 11 three 黑桃
## 12   two 黑桃
## 13   ace 黑桃
## 14  king 梅花
## 15 queen 梅花
## 16  jack 梅花
## 17   ten 梅花
## 18  nine 梅花
## 19 eight 梅花
## 20 seven 梅花
## 21   six 梅花
## 22  five 梅花
## 23  four 梅花
## 24 three 梅花
## 25   two 梅花
## 26   ace 梅花
## 27  king 方塊
## 28 queen 方塊
## 29  jack 方塊
## 30   ten 方塊
## 31  nine 方塊
## 32 eight 方塊
## 33 seven 方塊
## 34   six 方塊
## 35  five 方塊
## 36  four 方塊
## 37 three 方塊
## 38   two 方塊
## 39   ace 方塊
## 40  king 紅心
## 41 queen 紅心
## 42  jack 紅心
## 43   ten 紅心
## 44  nine 紅心
## 45 eight 紅心
## 46 seven 紅心
## 47   six 紅心
## 48  five 紅心
## 49  four 紅心
## 50 three 紅心
## 51   two 紅心
## 52   ace 紅心

今日重點回顧

應用情境:選取部分資料

1.整數索引

data[c(4,17,30,43), ]
##    牌面 花色 數值
## 4   ten 黑桃   10
## 17  ten 梅花   10
## 30  ten 方塊   10
## 43  ten 紅心   10

2.邏輯索引

3.名稱索引

data[data$數值 == 10, c("花色","數值")]
##    花色 數值
## 4  黑桃   10
## 17 梅花   10
## 30 方塊   10
## 43 紅心   10

應用情境:修改資料

  • 替換資料
data1[c(4,17,30,43), c("數值")] <- c(14,14,14,14)
  • 增加變數
data2$new <- c(1)
  • 刪除變數
data3$數值 <- NULL

參考資料