當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R array2DF 將數組轉換為 DataFrame


R語言 array2DF 位於 base 包(package)。

說明

array2DF 將數組(包括通常由 tapply 返回的列表數組)轉換為數據幀,以供進一步分析或繪圖函數使用。

用法

array2DF(x, responseName = "Value",
         sep = "", base = list(LETTERS),
         simplify = TRUE, allowLong = TRUE)

參數

x

一個數組對象。

responseName

字符串,用於在結果中創建列名稱(如果需要)。

sep

字符串,如果需要,在創建新名稱時用作分隔符。

base

字符向量,給出一組初始名稱來創建 x 的暗名稱(如果缺失)。

simplify

邏輯上,是否嘗試簡化結果。

allowLong

邏輯,指定如果 x 是列表數組並且 x 的所有元素都是未命名原子向量,是否應返回長格式數據幀。除非 simplify = TRUE 否則被忽略。

細節

array2DF 的主要用途是將數組(通常由 tapply 返回)轉換為數據幀。

simplify = FALSE 時,這與 as.data.frame.table 類似,隻不過它適用於列表數組和原子數組。具體來說,生成的數據幀對於數組的每個元素都有一行,對於數組的每個維度有一列,給出相應的 dimnames 。數組的內容放置在列中,列的名稱由 responseName 參數指定。該列的模式與 x 相同,通常是原子向量或列表。

如果 x 沒有 dimnames ,則會使用 basesep 自動創建它們。

默認情況下,當 simplify = TRUE 時,一些常見情況會被特殊處理。

如果 x 的所有組件都是具有相同列名(可能具有不同行數)的數據幀,則它們將被 rbind 編輯以形成響應。給出dimnames的附加列根據行數重複,並且在這種情況下忽略responseName

如果 x 的所有分量都是未命名的原子向量和 allowLong = TRUE ,則每個分量都被視為 single-column 數據幀,其列名稱由 responseName 給出,並按上述方式進行處理。

在所有其他情況下,simplify2array 都會嘗試進行簡化。如果這導致多個未命名列,則使用 responseNamesep 構造名稱。

至少包含 length(dim(x)) + 1 列的 DataFrame 。第一個 length(dim(x)) 列各自代表 x 的一個維度,並給出 dimnames 的相應值,如有必要,這些值會隱式創建。如果需要的話,在嘗試簡化後,其餘列包含 x 的內容。

例子

s1 <- with(ToothGrowth,
           tapply(len, list(dose, supp), mean, simplify = TRUE))

s2 <- with(ToothGrowth,
           tapply(len, list(dose, supp), mean, simplify = FALSE))

str(s1) # atomic array
str(s2) # list array

str(array2DF(s1, simplify = FALSE)) # Value column is vector
str(array2DF(s2, simplify = FALSE)) # Value column is list
str(array2DF(s2, simplify = TRUE))  # simplified to vector

### The remaining examples use the default 'simplify = TRUE' 

## List array with list components: columns are lists (no simplification)

with(ToothGrowth,
     tapply(len, list(dose, supp),
     function(x) t.test(x)[c("p.value", "alternative")])) |>
  array2DF() |> str()

## List array with data frame components: columns are atomic (simplified)

with(ToothGrowth,
     tapply(len, list(dose, supp),
     function(x) with(t.test(x), data.frame(p.value, alternative)))) |>
  array2DF() |> str()

## named vectors

with(ToothGrowth,
     tapply(len, list(dose, supp),
            quantile)) |> array2DF()

## unnamed vectors: long format

with(ToothGrowth,
     tapply(len, list(dose, supp),
            sample, size = 5)) |> array2DF()

## unnamed vectors: wide format

with(ToothGrowth,
     tapply(len, list(dose, supp),
            sample, size = 5)) |> array2DF(allowLong = FALSE)

## unnamed vectors of unequal length

with(ToothGrowth[-1, ],
     tapply(len, list(dose, supp),
            sample, replace = TRUE)) |>
  array2DF(allowLong = FALSE)

## unnamed vectors of unequal length with allowLong = TRUE
## (within-group bootstrap)

with(ToothGrowth[-1, ],
     tapply(len, list(dose, supp), sample, replace = TRUE)) |>
  array2DF() |> str()

## data frame input

tapply(ToothGrowth, ~ dose + supp, FUN = with,
       data.frame(n = length(len), mean = mean(len), sd = sd(len))) |>
  array2DF()

也可以看看

tapplyas.data.frame.tablesplitaggregate

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Convert array to data frame。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。