主題:
R語言中資料框的處理是重要技術之一,本篇文章說明資料框的常用處理技巧。
關鍵字:
- 列(Row),行(Column)篩選
- 類別 class
- 維度 dim
- 列名稱 row.names
- 行可稱 colnames, names
- 結構 str
- 摘要 summary
- 屬性 attributes
- apply
- lapply
> # 技巧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