当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。