![](/img/trans.png)
[英]How can I divide positive elements of a data frame by a specific data frame column and negative elements by another?
[英]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.