gpt4 book ai didi

r - dplyr:值的分组减法(基于预过滤的行)

转载 作者:行者123 更新时间:2023-12-03 02:46:01 24 4
gpt4 key购买 nike

我被困在一个(可能)非常明显的事情上,但我无法弄清楚实际的问题是什么。

DF <- data.frame(Gene = c(rep("A",8), rep("X",8)),
Genotype = c(rep("WT",4),rep("mut",4),rep("WT",4),rep("mut",4)),
TimePoint = c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4),
Value = c(12.5,12.33,11,10,23.22,22,21.2,45.3,22,12,23,21.2,23.2,45.3,21,22))

我想做的事:从组内的所有值中减去对应于 TimePoint == 1 的值(此处:Group = Gene, Genotype)。

我希望输出如此代码的结果所示:

DF %>% group_by(Gene, Genotype) %>% mutate(Diff = Value - first(Value))

但是,我会根据给定的时间点选择值,而不是第一个功能,该时间点不一定是每个组中的第一个。

我的想法是做这样的事情,但实际上它没有按预期使用分组数据:

DF %>% group_by(Gene, Genotype) %>% mutate(Diff = Value - filter(.,TimePoint == 1)$Value)

我真的不知道为什么分组数据没有正确传输到过滤器语句?

最佳答案

在分组步骤之后,通过使用“TimePoint”创建逻辑向量(即 TimePoint == 1)来对“Value”进行子集化,然后从“Value”中减去它

DF %>%
group_by(Gene, Genotype) %>%
mutate((Diff = Value - Value[TimePoint == 1]))
<小时/>

或者另一个选项是match来获取索引

DF %>%
group_by(Gene, Genotype) %>%
mutate((Diff = Value - Value[match(1, TimePoint)]))
<小时/>

如果我们确实需要使用filter,那么过滤数据集,然后执行right_join并获得差异

DF %>%
filter(TimePoint == 1) %>%
select(Gene, Genotype, Value1 = Value) %>%
right_join(DF) %>%
mutate(Diff = Value - Value1) %>%
select(-Value1)
<小时/>

过滤器之后过滤提取的“值”的OP方式不遵循group_by约束,它只是减去通过回收

关于r - dplyr:值的分组减法(基于预过滤的行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774409/

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