gpt4 book ai didi

r - 根据分组从列中减去值

转载 作者:行者123 更新时间:2023-12-04 09:38:31 25 4
gpt4 key购买 nike

我在 R 中有一个数据框,格式如下:

Treatment    Sample   Time_point   M1
A 1 0 0.12
A 2 0 0.45
A 3 0 0.35
A 1 1 0.76
A 2 1 0.45
A 3 1 0.41
A 1 2 0.94
A 2 2 0.55
A 3 2 0.44

等等。有 5 种不同的处理、3 个样本和 10 个时间点。还有大约 50 列各种测量值,名称不相关 - 我在这里只显示其中的第一个,M1。

对于这 50 次测量中的每一次,我想从所有后续时间点中减去它们在零时间保持的值。例如,M1 随后将如下所示:

 M1
0
0
0
0.64
0
0.06
0.82
0.10
0.09

我不知道该怎么做。我首先提取时间点零值,对它们进行重复序列,然后减去它们。但是,我一次只能让它工作一列,这有点令人费解。我想知道是否有办法在管道中使用 group_by 和 mutate 来更改每列的值,但无法找到一种方法来指定我需要减去的值。

最佳答案

d$M1 - ave(d$M1, d$Sample, d$Treatment, FUN = function(x) x[1])
#[1] 0.00 0.00 0.00 0.64 0.00 0.06 0.82 0.10 0.09

对于多个列,请尝试

nm = c("M1")  #Add column names here
sapply(nm, function(s){
d[[s]] - ave(d[[s]], d$Sample, d$Treatment, FUN = function(x) x[1])
})
# M1
# [1,] 0.00
# [2,] 0.00
# [3,] 0.00
# [4,] 0.64
# [5,] 0.00
# [6,] 0.06
# [7,] 0.82
# [8,] 0.10
# [9,] 0.09

tidyverse 等价物可能是

d %>% group_by(Sample, Treatment) %>% mutate_at(nm, function(x) x - x[1])

关于r - 根据分组从列中减去值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com