我有一张表,其中第一列是时间点(例如0分钟,10分钟等),而其他每一列都是不同的测试,每一行在每个时间点都有一个度量。(这里的微生物学家:96孔板中的细菌生长曲线。)我想通过从自身和该列中的所有其他列中减去每个列的时间0测量来进行背景校正,以便在时间0处的每个测量为0。但是,时间栏应保持不变。
> input
time A1 A2 A3
0 1 1 2
10 2 3 3
20 3 5 4
30 4 7 5
>output
time A1 A2 A3
0 0 0 0
10 1 2 1
20 2 4 2
30 3 6 3
我已经尝试过了df$A1 = df$A1 - df$A1[1]
,虽然可以,但是我有96列,这会很乏味。
使用dplyr
您可以做到:
library(dplyr)
input <- input %>% mutate(across(A1:A3, ~. - .[time == 0]))
input
# time A1 A2 A3
#1 0 0 0 0
#2 10 1 2 1
#3 20 2 4 2
#4 30 3 6 3
在基数R中,您可以使用sweep
:
input[-1] <- sweep(input[-1], 2, unlist(input[input$time == 0, -1]), `-`)
数据
input <- structure(list(time = c(0L, 10L, 20L, 30L), A1 = 1:4, A2 = c(1L,
3L, 5L, 7L), A3 = 2:5), class = "data.frame", row.names = c(NA, -4L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句