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