Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R(dplyr)从同一子集(朱利安日期)内的所有其他数据中减去控制行_R_Dplyr_Subset_Subtraction - Fatal编程技术网

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

使用R(dplyr)从同一子集(朱利安日期)内的所有其他数据中减去控制行,r,dplyr,subset,subtraction,R,Dplyr,Subset,Subtraction,到目前为止,我还没有找到一个合适的解决方案来解决我的堆栈溢出问题 我想使用dplyr从数据中减去一个控制值。我只需要从同一日期测量的数据中减去控件。我的数据框中包含多个日期,每个日期包含不同数量的数据 我的数据如下所示;其中,“F”是需要修改的样本,“AC”是将被减去的对照 Sample Tissue Date Result1 Result2 1 F 10-Jul 210 56.0 2 F 1

到目前为止,我还没有找到一个合适的解决方案来解决我的堆栈溢出问题

我想使用
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) %>%
但没有真正的成功。我想有一个简单的解决方案,对此我将非常感激

因此,我最终得到的数据如下所示:

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%
按(日期)分组%>%
在(变量(3:4)、funs(.-.[tissure==“AC”])发生突变。


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

我似乎已经用以下代码解决了这个问题:

df = read.table(text = "
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
", stringsAsFactors=F, header=T)

library(dplyr)

df %>%
  group_by(Date) %>%                                                         # for each date
  mutate(control1 = Result1[Tissue == "AC"],                                 # calculate control values
         control2 = Result2[Tissue == "AC"]) %>%
  ungroup() %>%                                                              # forget about the grouping
  mutate(Result1 = ifelse(Tissue == "F", Result1 - control1, Result1),       # update result values only for rows with tissue = F
         Result2 = ifelse(Tissue == "F", Result2 - control2, Result2)) %>%
  select(Sample:Result2)                                                     # select columns of interest

# # A tibble: 10 x 5
#   Sample Tissue   Date Result1 Result2
#    <int>  <chr>  <chr>   <int>   <dbl>
# 1      1      F 10-Jul      10      46
# 2      2      F 10-Jul     327     417
# 3      3      F 10-Jul     357      59
# 4      4      F 10-Jul     484     334
# 5      5      F 10-Jul     450       0
# 6      6     AC 10-Jul     200      10
# 7      7      F 12-Jul     576      60
# 8      8      F 12-Jul     420      65
# 9      9      F 12-Jul     495     725
# 10     10    AC 12-Jul     100       5
myData2 <- myData %>% 
  group_by(Date) %>%
  mutate_at(vars(3:4),funs(.-.[Tissue=="AC"]))
myData2%
分组单位(日期)%>%
在(变量(3:4)、funs(.-[组织==“AC”])处突变

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

我似乎用以下代码解决了这个问题:

myData2 <- myData %>% 
  group_by(Date) %>%
  mutate_at(vars(3:4),funs(.-.[Tissue=="AC"]))
myData2%
分组单位(日期)%>%
在(变量(3:4)、funs(.-[组织==“AC”])处突变

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

您的解决方案与您想要的输出不匹配,因为它通过产生零来更改
tissure=AC
的行。此外,您还可以在
mutate_at
中指定列的位置,因此必须确保这些位置在将来不会改变。此外,最后您可能需要取消分组,以防影响未来的数据操作。我喜欢
mutate_at
解决方案:-),但我建议:
myData%>%group_by(Date)%%>%mutate_at(vars(matches(“Result”)、funs(ifelse(tissure==“F”、.-[tissure==“AC”],))%%>%ungroup()
至少对我的数据而言,在下一步从数据中过滤出来时,AC的最终读数为零是可以的。谢谢你的改进!您的解决方案与所需的输出不匹配,因为它通过生成零来更改
tissure=AC
所在的行。此外,您还可以在
mutate_at
中指定列的位置,因此必须确保这些位置在将来不会改变。此外,最后您可能需要取消分组,以防影响未来的数据操作。我喜欢
mutate_at
解决方案:-),但我建议:
myData%>%group_by(Date)%%>%mutate_at(vars(matches(“Result”)、funs(ifelse(tissure==“F”、.-[tissure==“AC”],))%%>%ungroup()
至少对我的数据而言,在下一步从数据中过滤出来时,AC的最终读数为零是可以的。谢谢你的改进!
myData2 <- myData %>% 
  group_by(Date) %>%
  mutate_at(vars(3:4),funs(.-.[Tissue=="AC"]))