如何将R中数据框中的行与dplyr配对?

时间:2016-07-10 19:35:23

标签: r dplyr

我有一个数据框,其中包含来自对照组和实验组的观察结果,并为每个受试者提供重复: 以下是我的数据框示例:

subject  group    replicate value
  A     control      1       10
  A     control      2       15
  A     experim      1       40
  A     experim      2       45
  B     control      1       5
  B     experim      1       30
  C     control      1       50
  C     experim      1       NA

我想将每个对照观察与其对应的实验对配对,以计算配对值之间的比率。 所需的输出:

subject  replicate  control   experim  ratio
  A         1         10        40       4
  A         2         15        45       3
  B         1          5        30       6
  C         1         50        NA       NA

请注意,受试者的重复次数可能不同(A有两个重复,B只有一个,C有一个缺失值)。理想情况下,我希望看到使用dplyr和管道实现这一点。

1 个答案:

答案 0 :(得分:3)

我们可以使用dcast中的data.table转换为'范围'格式,然后创建'比率'通过划分'实践'与'控制'

library(data.table)
dcast(setDT(df1), subject+replicate~group, value.var="value")[,
            ratio:= experim/control][]
#     subject replicate control experim ratio
#1:       A         1      10      40     4
#2:       A         2      15      45     3
#3:       B         1       5      30     6
#4:       C         1      50      NA    NA

或者使用spread中的tidyr转换为'范围'格式,然后创建'比率'与mutate

library(dplyr)
library(tidyr)
spread(df1, group, value) %>% 
        mutate(ratio = experim/control)
#    subject replicate control experim ratio
#1       A         1      10      40     4
#2       A         2      15      45     3
#3       B         1       5      30     6
#4       C         1      50      NA    NA

或使用reshape

中的base R
transform(reshape(df1, idvar = c("subject", "replicate"), 
   timevar="group", direction="wide"), ratio = value.experim/value.control)