我有一个数据框,其中包含来自对照组和实验组的观察结果,并为每个受试者提供重复: 以下是我的数据框示例:
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和管道实现这一点。
答案 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)