使用R(dplyr)从同一子集(Julian日期)中的所有其他数据中减去控制行

时间:2017-11-28 14:34:29

标签: r dplyr subset subtraction

到目前为止,我还无法在Stack Overflow上找到合适的解决方案。

我想使用dplyr从我的数据中减去一个控制值。我需要从仅在同一天测量的数据中减去控制。我的数据框中包含多个日期,每个日期包含不同数量的数据。

我的数据类似于下面列出的数据;在哪里' F'是需要修改的样品和AC'是要减去的控件。

Sample  Tissue   Date       Result1     Result2
1       F      10-Jul          210         56.0
2       F      10-Jul          527        427.0
3       F      10-Jul          557         69.0
4       F      10-Jul          684        344.0
5       F      10-Jul          650         10.0
6       AC     10-Jul          200         10.0
7       F      12-Jul          676         65.0
8       F      12-Jul          520         70.0
9       F      12-Jul          595        730.0
10      AC     12-Jul          100          5.0

我想我需要使用:

myData <- myData2 %>%
group_by(Date) %>%

从那里我有点困惑,我已经尝试过了:

mutate(Result1 = Result1 - subset(myData$Result1, myData$Tissue=="AC"))

但没有取得真正的成功。我想那里有一个简单的解决方案,我将非常感激!

因此我最终会得到类似这样的数据:

Sample  Tissue   Date       Result1     Result2
1       F      10-Jul           10         46.0
2       F      10-Jul          327        417.0
3       F      10-Jul          357         59.0
4       F      10-Jul          484        334.0
5       F      10-Jul          450          0.0
6       AC     10-Jul          200         10.0
7       F      12-Jul          576         60.0
8       F      12-Jul          420         65.0
9       F      12-Jul          495        725.0
10      AC     12-Jul          100          5.0

如果可以使用该函数同时计算两个结果或更多结果的差异,将会很有用。提前谢谢!

编辑:

我认为我已经找到了使用此代码的解决方案

myData2 <- myData %>% group_by(Date) %>%
mutate_at(vars(3:4),funs(.-.[Tissue=="AC"]))

我的逻辑在这里工作吗?另外,为什么我需要从列号中取1来使用vars()函数?

1 个答案:

答案 0 :(得分:2)

我好像用这段代码解决了它:

myData2 <- myData %>% 
  group_by(Date) %>%
  mutate_at(vars(3:4),funs(.-.[Tissue=="AC"]))

我喜欢这个解决方案的简单性,但很多感谢其他受访者花时间帮助我。