2022年2月4日 星期五

R資料框操作20技巧 (20 Tips for data.frame)

主題:

R語言中資料框的處理是重要技術之一,本篇文章說明資料框的常用處理技巧。



關鍵字:

  • 列(Row),行(Column)篩選
  • 類別 class
  • 維度 dim
  • 列名稱 row.names
  • 行可稱 colnames, names
  • 結構 str
  • 摘要 summary
  • 屬性 attributes
  • apply
  • lapply
資料框操作20技巧:

> # 技巧1 篩選行,結果為 vector

> iris$Sepal.Length

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 

...

> # 技巧2 篩選行,結果為 vector(二個單引號)

> iris[, 'Sepal.Length']

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1

...

> # 技巧3 篩選行,結果為 vector(二個雙單引號)

> iris[, "Sepal.Length"]

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1

...

> # 技巧4 篩選行,結果為 vector

> iris[, 1]

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1

...

> # 技巧5 篩選行,結果為 vector

> iris[['Sepal.Length']]

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1

...

> # 技巧6 篩選行,結果為 vector

> iris[["Sepal.Length"]]

  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

 [11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1

...

> # 技巧7 篩選行,結果為 data.frame

> iris['Sepal.Length']

    Sepal.Length

1            5.1

2            4.9

3            4.7

...

> # 技巧8 篩選行,結果為 data.frame

> iris["Sepal.Length"]

    Sepal.Length

1            5.1

2            4.9

3            4.7

...

> # 技巧9 篩選列,結果為 data.frame

> iris[1, ]

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1          5.1         3.5          1.4         0.2  setosa

> # 技巧10 篩選列,使用數值轉換,再加數值1,省略as.numeric會有錯誤

> as.numeric(iris[1,-5]) + 1

[1] 6.1 4.5 2.4 1.2

> # 技巧11 類別

> class(iris)

[1] "data.frame"

> # 技巧12 維度,結果為150列,5行

> dim(iris)

[1] 150   5

> # 技巧13 列名稱

> row.names(iris)

  [1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10" 

...

> # 技巧14 行名稱

> colnames(iris)

[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

> # 技巧15 行名稱

> names(iris)

[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

> # 技巧16 資料結構

> str(iris)

'data.frame': 150 obs. of  5 variables:

 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...

 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...

 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...

 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 ...

> # 技巧17 資料摘要

> summary(iris)

  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  

 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  

 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  

 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  

 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  

 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  

 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500                  

> # 技巧18 資料屬性

> attributes(iris)

$names

[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

$class

[1] "data.frame"

$row.names

  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20

 [21]  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40

> # 技巧19 各列或各行群組計算

> apply(iris[-5], 1, mean)

  [1] 2.550 2.375 2.350 2.350 2.550 2.850 2.425 2.525 2.225

 [10] 2.400 2.700 2.500 2.325 2.125 2.800 3.000 2.750 2.575

...

> # 技巧20 各行群組計算,回傳結果為串列(list)- lapply 以行運算為主

> lapply(iris[-5], mean)

$Sepal.Length

[1] 5.843333

$Sepal.Width

[1] 3.057333

$Petal.Length

[1] 3.758

$Petal.Width

[1] 1.199333

# end