簡體   English   中英

如何將值除以正負數據的最大列

[英]How to divide value by max column for positive and negative data

我有一個短矩陣,在下面的行中表示:

   a    b
   1    2
   5   -6
  -3   -4
   4    3

我想獲得正值的 x/max(x) 和負值的 x/min(x) 。 想要獲取的結果列如下:

    a.max    b.max
      1/5     2/3
      5/5    -6/6
     -3/3    -4/6
      4/5     3/3

注意:為了獲得最小值,我必須使分數以下的數字為正數

這個怎么樣:

mat <- matrix(c(1,5,-3,4,2,-6,-4,3), ncol=2)

如果你想讓它做除法

apply(mat, 2, function(x)x/ifelse(x < 0, abs(min(x)), abs(max(x))))
#>      [,1]       [,2]
#> [1,]  0.2  0.6666667
#> [2,]  1.0 -1.0000000
#> [3,] -1.0 -0.6666667
#> [4,]  0.8  1.0000000

如果你不想讓它做數學運算,如果你想讓它打印字符串。

apply(mat, 2, function(x)paste(x, "/", ifelse(x < 0, abs(min(x)), abs(max(x))), sep=""))
#>      [,1]   [,2]  
#> [1,] "1/5"  "2/3" 
#> [2,] "5/5"  "-6/6"
#> [3,] "-3/3" "-4/6"
#> [4,] "4/5"  "3/3"

reprex package (v2.0.1) 創建於 2022-12-08

使用dplyr重寫並稍微修改@DaveArmstrong 的解決方案,我們可以這樣:

數據和Package

library(dplyr)

m <- tibble::tribble(
  ~a, ~b,
   1,   2,
   5,  -6,
  -3,  -4,
   4,   3
)

m
#> # A tibble: 4 × 2
#>       a     b
#>   <dbl> <dbl>
#> 1     1     2
#> 2     5    -6
#> 3    -3    -4
#> 4     4     3

(1) 數字解

m %>% mutate(across(a:b, ~.x/ifelse(.x < 0, abs(min(.x)), abs(max(.x)))))

#> # A tibble: 4 × 2
#>       a      b
#>   <dbl>  <dbl>
#> 1   0.2  0.667
#> 2   1   -1    
#> 3  -1   -0.667
#> 4   0.8  1

(2) 解為公式(字符)

m %>% mutate(across(a:b, ~paste0(.x, "/", ifelse(.x < 0, abs(min(.x)), abs(max(.x))))))

#> # A tibble: 4 × 2
#>   a     b    
#>   <chr> <chr>
#> 1 1/5   2/3  
#> 2 5/5   -6/6 
#> 3 -3/3  -4/6 
#> 4 4/5   3/3

創建於 2022-12-08,使用reprex v2.0.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM