当前位置: 首页 > 知识库问答 >
问题:

如何获取多维R数组中单个单元格的DIMNAME?

颛孙铭
2023-03-14

我有一个大型多维数组(约1900万个元素),其中包含多个不同属性的联合概率。

数组非常稀疏,我只对概率非零的单元格感兴趣。

但是,在筛选数组中的非零元素时,我无法检索筛选值的维度名称(对应于各种属性值)。

以下是一个玩具示例:

array_dim <- c(2,5,5,4)

array_fill <- runif(prod(array_dim))

array_dimnames <- list(
                    c('strawberry', 'blackberry'),
                    c('cranberry', 'banana', 'pineapple', 'apple', 'tangerine'), 
                    c('orange', 'blueberry', 'kiwi', 'grapes', 'guava'),
                    c('plum', 'fig', 'grapefruit', 'lemon')
                    )


fruits <- array(array_fill, dim=array_dim, dimnames=array_dimnames)

我可以获得与某个标准匹配的单元格的索引值(此处,

> which(fruits %in% fruits[fruits>0.9], arr.ind = TRUE)
 [1]   8  23  25  32  33  35  37  76  77  85  90 101 117 121 123 135 154 197

但我无法使用上述索引值并找出它们是什么水果组合,因为在查找特定单元格值时,DIMNAME会被删除:

> fruits[8]
[1] 0.9590207
> fruits[8, drop=FALSE]
[1] 0.9590207
> dimnames(fruits[8])
NULL
> names(fruits[8])
NULL

我尝试将数组转换为data.frame,并使用drop=FALSE参数:

> fruits.df <- as.data.frame(fruits)
> 
> fruits.df[1,2,drop=FALSE]

           banana.orange.plum
strawberry          0.4003854

但是添加条件过滤器失败,因为fruits.df[fruits.df

作为最后的手段,我可以构造 array_index -

我还研究了listaries包。

提前感谢


共有1个答案

赫连秦迟
2023-03-14

我也没有找到直接从数组中获取DIMNAME的简单方法。转换数据结构的简单方法是使用dplyr中的作为_tbl_cube,并将其转换为data.frame(或data.table)以查看dimnames:

set.seed(3)
array_dim <- c(2,5,5,4)
array_fill <- runif(prod(array_dim))
array_dimnames <- list(
    dim1=c('strawberry', 'blackberry'),
    dim2=c('cranberry', 'banana', 'pineapple', 'apple', 'tangerine'), 
    dim3=c('orange', 'blueberry', 'kiwi', 'grapes', 'guava'),
    dim4=c('plum', 'fig', 'grapefruit', 'lemon')
)
fruits <- array(array_fill, dim=array_dim, dimnames=array_dimnames)
which(fruits %in% fruits[fruits>0.9], arr.ind = TRUE)
#>  [1]  28  54  56  73  74  85  90 115 161 198
fruits[198]
#> [1] 0.9065314

library(dplyr)
arr.cube <- as.tbl_cube(fruits)
tail(as.data.frame(arr.cube))
#>           dim1      dim2  dim3  dim4    fruits
#> 195 strawberry pineapple guava lemon 0.7057146
#> 196 blackberry pineapple guava lemon 0.3907374
#> 197 strawberry     apple guava lemon 0.8242374
#> 198 blackberry     apple guava lemon 0.9065314
#> 199 strawberry tangerine guava lemon 0.4171170
#> 200 blackberry tangerine guava lemon 0.2791320

在这个例子中,水果[198]的名字是黑莓、苹果、番石榴和柠檬。

 类似资料:
  • 问题内容: 例 问题,如何获得单一值,例如: 问题答案: 查看您的中的键和缩进: …等等

  • 有人能给我一个解决方案,我可以在单元格为空时读取应用到单元格的样式吗? 谢了。

  • 我有一个带有sheet1 excel文件,该文件的第2行和第10列有一个我需要读取的值。这是我的代码。 获取了cell对象Excel.Range后,我不知道如何读取该单元格的内容。我试着把它转换成数组并在它上面循环,我试着转换成字符串数组等等,我确信这是非常简单的。有没有直接的方法只得到一个字符串的单元格值?

  • 我构建了一个条件,从我的数据框中提取一行: 现在我想从特定列中获取一个值: 但结果,我得到了一个包含一行和一列(即一个单元格)的数据帧。这不是我需要的。我需要一个值(一个浮点数)。我怎样才能在熊猫身上做到这一点?

  • 我构造了一个从数据帧中提取一行条件: 现在我想从一个特定列中取一个值:

  • 问题内容: 我想以一个简单的字符串来获取数值单元格的值。 假设单元格的类型是带有value的数字。现在我无法使用,因为它将引发异常。我也无法使用,因为它会使我退缩。 我想存储在类型为varchar2的db中,所以我只希望字符串中的值。 我无法更改单元格类型,因为它是最终用户的工作,我必须在代码本身中进行处理。 格式化程序也无法正常工作,因为xls … dd:mm,dd:mm:ss,公式等中可能存在