小编Tob*_*ker的帖子

将数组与矩阵 R 相乘

当我有一个维度为 (i,j,k) 的数组和一个维度为 (j,q) 的矩阵时。我如何将每个 (,,k) 与该矩阵相乘。举个例子更有意义。

A <- array(c(rep(1,20), rep(2,20), rep(3,20)),dim = c(10,2,3))
B <- matrix(c(1:10), nrow = 2)
# multiply each A[,,i]%*%B

C <- array(NA, dim=c(nrow(A), ncol(B), 3))
C[] <- apply(A, 3, function(x) x%*%B)
Run Code Online (Sandbox Code Playgroud)

我可以通过这种方式获得结果,但我正在寻找一种更有效的方式,例如使用 ATensor 包。我希望有人能帮助我解决这个问题。

arrays r matrix linear-algebra multidimensional-array

5
推荐指数
0
解决办法
2338
查看次数

减少每个因子dplyr方法的级别数

我试图减少数据中每个因子变量的级别数.我想减少执行2次操作的级别数:

  1. 如果级别数大于截止值,则将较不频繁的级别替换为新级别,直到级别数达到截止值为止
  2. 将一个因子中的等级替换为没有足够的观察值到一个新的等级

我写了一个工作正常的函数,但我不喜欢这些代码.如果REMAIN级别没有足够的观察结果也没关系.我更喜欢dplyr方法.

ReplaceFactor <- function(data, max_levels, min_values_factor){
    # First make sure that not to many levels are in a factor
    for(i in colnames(data)){
        if(class(data[[i]]) ==  "factor"){
            if(length(levels(data[[i]])) > max_levels){
                levels_keep <- names(sort(table(data[[i]]), decreasing = T))[1 : (max_levels - 1)]
                data[!get(i) %in% levels_keep, (i) := "REMAIN"]
                data[[i]] <- as.factor(as.character(data[[i]]))
            }
        } 
    }
    # Now make sure that in each level has enough observations
    for(i in colnames(data)){
        if(class(data[[i]]) ==  "factor"){
            if(min(table(data[[i]])) < min_values_factor){
                levels_replace <- table(data[[i]])[table(data[[i]]) < min_values_factor]
                data[get(i) %in% …
Run Code Online (Sandbox Code Playgroud)

r levels dplyr

2
推荐指数
1
解决办法
410
查看次数

查找每行最大索引的最快方法

我试图找到一种最佳方法来查找每行中最大值的索引.问题是我无法找到一种真正有效的方法.一个例子:

Dummy <- matrix(runif(500000000,0,3), ncol = 10000)
> system.time(max.col(Dummy, "first"))
   user  system elapsed 
  5.532   0.075   5.599 
> system.time(apply(Dummy,1,which.max))
   user  system elapsed 
 14.638   0.210  14.828 
> system.time(rowRanges(Dummy))
   user  system elapsed 
  2.083   0.029   2.109 
Run Code Online (Sandbox Code Playgroud)

我的主要问题是,与使用rowRanges函数计算最大值和最小值相比,为什么计算最大值的索引的速度超过2倍.有没有办法如何提高计算每行最大索引的性能?

r range max matrix min

1
推荐指数
2
解决办法
1168
查看次数

标签 统计

r ×3

matrix ×2

arrays ×1

dplyr ×1

levels ×1

linear-algebra ×1

max ×1

min ×1

multidimensional-array ×1

range ×1