r - 如何将 R 中数据帧中的行与 dplyr 配对?

标签 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 和管道实现。

最佳答案

我们可以使用 data.table 中的 dcast 转换为“wide”格式,然后通过将“experim”除以“control”来创建“ratio”列

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

或者使用 tidyr 中的 spread 转换为“宽”格式,然后使用 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

或者使用base R中的reshape

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

关于r - 如何将 R 中数据帧中的行与 dplyr 配对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295777/

相关文章:

r - 使用 R 计算 2 个时间戳之间的时间差(以小时为单位)

r - 带有缺失值的 dplyr 交叉表

r - 在 R 中寻找适用于嵌套 for 循环情况的 apply、tidyr 或 dplyr 解决方案

regex - 如何将 POS 与单词分开

r - 分面时使用 stat_summary 为折线图生成误差线的问题

r - dplyr 根据多个条件替换列中的 na 值

r - 如何仅将函数应用于 dplyr 中组的第一行?

r - 如果存在,则从多列中填充新列

mysql - 比较相同数据框的行

重命名分类级别以减少级别数