使用 Dplyr 在不指定名称的情况下按组计算每一列的百分比?
Using Dplyr to calculate percent by group for every column without specifying the name?
这类似于。但是我感兴趣的是计算每一列的百分比。因此,例如,当我执行以下操作时,我可以通过显式列出 S1 列来计算它,但是我想要一种无需指定即可对所有列执行此操作的方法。
input <- 'Gene Exon S1 S2 S3
G1 E1 56 52 95
G1 E2 25 52 5
G1 E3 32 66 22
G2 E1 55 11 33
G2 E2 46 12 44'
df = read.table ( text=input, header=T)
df$Exon = NULL
df %>% group_by(Gene) %>% summarise ( per = S1 / sum (S1) )
以上将总结 S1 的百分比,但是当
我尝试使用它导致的时间段和错误。
df %>% group_by(Gene) %>% summarise ( per = . / sum (.) )
提前致谢。
您可以为此使用 across
:
library(dplyr)
df %>%
group_by(Gene) %>%
summarize(across(matches("^S[0-9]+"), ~ . / sum(.)), .groups = "drop")
# # A tibble: 5 x 4
# Gene S1 S2 S3
# <chr> <dbl> <dbl> <dbl>
# 1 G1 0.496 0.306 0.779
# 2 G1 0.221 0.306 0.0410
# 3 G1 0.283 0.388 0.180
# 4 G2 0.545 0.478 0.429
# 5 G2 0.455 0.522 0.571
这类似于
input <- 'Gene Exon S1 S2 S3
G1 E1 56 52 95
G1 E2 25 52 5
G1 E3 32 66 22
G2 E1 55 11 33
G2 E2 46 12 44'
df = read.table ( text=input, header=T)
df$Exon = NULL
df %>% group_by(Gene) %>% summarise ( per = S1 / sum (S1) )
以上将总结 S1 的百分比,但是当 我尝试使用它导致的时间段和错误。
df %>% group_by(Gene) %>% summarise ( per = . / sum (.) )
提前致谢。
您可以为此使用 across
:
library(dplyr)
df %>%
group_by(Gene) %>%
summarize(across(matches("^S[0-9]+"), ~ . / sum(.)), .groups = "drop")
# # A tibble: 5 x 4
# Gene S1 S2 S3
# <chr> <dbl> <dbl> <dbl>
# 1 G1 0.496 0.306 0.779
# 2 G1 0.221 0.306 0.0410
# 3 G1 0.283 0.388 0.180
# 4 G2 0.545 0.478 0.429
# 5 G2 0.455 0.522 0.571