6 處理資料 - 陣列

6.1 簡介

Arrow 陣列約等於一個 R 向量 - 它可以用來表示單一資料欄,所有值都具有相同的資料類型。

已實作許多基本 R 函式(具有 S3 通用方法)以在 Arrow 陣列上執行作業;例如 meanminmax

6.2 依符合述詞或遮罩的數值篩選

您想在陣列中搜尋符合述詞條件的數值。

6.2.1 解决方案

my_values <- Array$create(c(1:5, NA))
my_values[my_values > 3]
## Array
## <int32>
## [
##   4,
##   5,
##   null
## ]

6.2.2 論壇

您可以使用方括號 [] 來表示陣列中的項目,就像您使用 R 向量一樣。

6.3 計算陣列的平均值/最小值/最大值等

您想要計算陣列中數值的平均值、最小值或最大值。

6.3.1 解决方案

my_values <- Array$create(c(1:5, NA))
mean(my_values, na.rm = TRUE)
## Scalar
## 3

6.3.2 論壇

許多基礎 R 泛函函式,例如 mean()min()max() 已對應其 Arrow 等價對應項,因此可以用相同的方式在 Arrow 陣列物件中呼叫。它們將回傳 Arrow 物件本身。

如果您想要使用沒有 Arrow 對應項的 R 函式,您可以使用 as.vector() 來將 Arrow 物件轉換為基礎 R 向量。

arrow_array <- Array$create(1:100)
# get Tukey's five-number summary
fivenum(as.vector(arrow_array))
## [1]   1.0  25.5  50.5  75.5 100.0

您可以查看函式的本體來判斷函式是否是標準 S3 泛函函式,S3 泛函函式會呼叫 UseMethod() 來判斷該物件要使用該函式哪一個版本。

mean
## function (x, ...) 
## UseMethod("mean")
## <bytecode: 0x564a10424388>
## <environment: namespace:base>

您也可以使用 isS3stdGeneric() 來判斷函式是否為 S3 泛函函式。

isS3stdGeneric("mean")
## mean 
## TRUE

如果您發現某個 S3 泛函函式未針對 Arrow 物件實作,但想要使用其功能,請 前往專案 JIRA 開立問題

6.4 計算陣列中元素的出現次數

您想要計算陣列中重複的數值。

6.4.1 解决方案

repeated_vals <- Array$create(c(1, 1, 2, 3, 3, 3, 3, 3))
value_counts(repeated_vals)
## StructArray
## <struct<values: double, counts: int64>>
## -- is_valid: all not null
## -- child 0 type: double
##   [
##     1,
##     2,
##     3
##   ]
## -- child 1 type: int64
##   [
##     2,
##     1,
##     5
##   ]

6.4.2 論壇

Arrow R 套件中有一些函式沒有基礎 R 等價對應項。在其他情況下,基礎 R 等價對應項不是泛函函式,因此無法直接在 Arrow 陣列物件呼叫。

例如,Arrow R 套件中的 value_counts() 函式與基礎 R 函式 table() 大致等價,後者不是泛函函式。

6.5 將算術函式應用到陣列

您想要對陣列物件使用不同的算術運算子。

6.5.1 解决方案

num_array <- Array$create(1:10)
num_array + 10
## Array
## <double>
## [
##   11,
##   12,
##   13,
##   14,
##   15,
##   16,
##   17,
##   18,
##   19,
##   20
## ]

6.5.2 討論

如果作為箭頭物件傳入您要加總的值,您將得到同樣的結果。

num_array + Scalar$create(10)
## Array
## <double>
## [
##   11,
##   12,
##   13,
##   14,
##   15,
##   16,
##   17,
##   18,
##   19,
##   20
## ]

6.6 直接在陣列中呼叫 Arrow 計算函式

您想要直接在陣列中呼叫 Arrow 計算函式。

6.6.1 解决方案

first_100_numbers <- Array$create(1:100)

# Calculate the variance of 1 to 100, setting the delta degrees of freedom to 0.
call_function("variance", first_100_numbers, options = list(ddof = 0))
## Scalar
## 833.25

6.6.2 討論

您可以使用 call_function() 直接在標量、陣列和區塊陣列物件中呼叫 Arrow 計算函式。回傳的物件將是箭頭物件。

6.6.3 另請參閱

如需關於箭頭計算函式的更深入探討,請參閱 arrow 中 dplyr 動詞中使用箭頭函式的 章節