首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据条件计算同一极地值之间的差值

如何根据条件计算同一极地值之间的差值
EN

Stack Overflow用户
提问于 2022-11-29 13:29:44
回答 1查看 17关注 0票数 0

我有一个包含成对值的长df。我需要计算时点之间的差额。

代码语言:javascript
运行
复制
   ID    Sample_ID  Treatment Timepoint  Score
   Amu      A          Contr      0       10
   Amu      A          Contr      1       5
   Amu      A          Treat      0       11
   Amu      A          Treat      1       7
   Amu      B          Contr      0       9
   Amu      B          Contr      1       4
   Amu      B          Treat      0       10
   Amu      B          Treat      1       6

我想做的是按ID、sample_ID、处理进行分组,然后计算时点"1“和"0”之间的分数差值。我应该得到:

代码语言:javascript
运行
复制
 Amu_A_Contr = (5-10)
 Amu_A_Treat = (7-11)
 etc.

我尝试使用以下代码:

代码语言:javascript
运行
复制
group_by(ID,Sample_ID, Treatment)%>%
  mutate(Diff = lead(Score) - Score )

但由于某种原因,分组功能失败了,因此,如果有人能帮上忙,那就太好了。

谢谢:)

代码语言:javascript
运行
复制
EN

回答 1

Stack Overflow用户

发布于 2022-11-29 15:42:20

我要做的就是把时间点转到列上,然后差别就很简单了

代码语言:javascript
运行
复制
library(dplyr)
library(tidyr)

df <- data.frame(ID = rep('AMU', 8),
                 Sample_ID = c(rep('A', 4), rep('B', 4)),
                 Treatment = c('Contr', 'Contr', 'Treat', 'Treat', 'Contr', 'Contr', 'Treat', 'Treat'),
                 Timepoint = rep(c(0, 1), 4),
                 Score = c(10, 5, 11, 7, 9, 4, 10, 6)
                 )

df %>% 
  pivot_wider(id_cols = c(ID, Sample_ID, Treatment), 
              names_from = 'Timepoint', 
              values_from = 'Score', 
              names_glue = "time_{Timepoint}") %>% 
  mutate(diff = time_1 - time_0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74614855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档