我使用下面的示例代碼版本將表格值轉換為百分比。我遇到的問題是這段代碼部署在一個閃亮的應用程式中,其中表大小根據用戶輸入反應擴展/收縮(按列和行),甚至是最左邊的列標題(“To”列標題在此資料框示例)根據用戶輸入進行回應式更改。
如何將mutate(across())下面陳述句中的列參考從“To”和“Sum”更改為資料框的第一列和最后一列?
此代碼適用于如下所示的靜態資料幀,但不適用于在 Shiny 中呈現的動態資料幀。
示例代碼:
library(tidyverse)
data <-
data.frame(
To = c("A","B","C"),
A = c(1,2,4),
B = c(3,4,5),
C = c(5,6,7)
)
data <- data %>%
replace(is.na(.), 0) %>%
bind_rows(summarise_all(., ~(if(is.numeric(.)) sum(.) else "Sum")))
data <- cbind(data, Sum = rowSums(data[,-1]))
data %>%
mutate(across(-c(To), ~ ./.[To == "Sum"]))
uj5u.com熱心網友回復:
要排除第一列,您可以簡單地使用-1. 由于Sum包含在最后一行中,您可以除以.x[length(.x)]:
library(tidyverse)
data %>%
mutate(across(-1, ~ .x / .x[length(.x)]))
#> To A B C Sum
#> 1 A 0.1428571 0.2500000 0.2777778 0.2432432
#> 2 B 0.2857143 0.3333333 0.3333333 0.3243243
#> 3 C 0.5714286 0.4166667 0.3888889 0.4324324
#> 4 Sum 1.0000000 1.0000000 1.0000000 1.0000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454423.html
上一篇:從沒有擴展名的字串中提取檔案名
下一篇:如何重新定位原始列旁邊的變異列?
