我有一个类似于下面展示的数据集
<表类>
gene_name
gene_length
value1
value2
value3
tbody><<tr>对 1070 100 300 600 NameB 110 200 600 1200 表类>
循环across
'value'列,创建lambda函数(~
)将列(.x
)除以'gene_length',并修改.names
以_result
作为后缀创建新列
library(dplyr)
desired_df <- df %>%
mutate(across(.cols = starts_with("value"), ~ .x/gene_length,
.names = '{.col}_result'))
与产出
> desired_df
gene_name gene_length value1 value2 value3 value1_result value2_result value3_result
1 NameA 1070 100 300 600 0.09345794 0.2803738 0.5607477
2 NameB 110 200 600 1200 1.81818182 5.4545455 10.9090909
或使用data.table
library(data.table)
nm1 <- grep("value", names(df), value = TRUE)
setDT(df)[, paste0(nm1, "_result") := lapply(.SD, (x)
x/gene_length), .SDcols = nm1]
数据df <- structure(list(gene_name = c("NameA", "NameB"), gene_length = c(1070L,
110L), value1 = c(100L, 200L), value2 = c(300L, 600L), value3 = c(600L,
1200L)), class = "data.frame", row.names = c(NA, -2L))