R 使用条件从一行中减去另一行
我有一张这样的桌子:R 使用条件从一行中减去另一行,r,row,subtraction,R,Row,Subtraction,我有一张这样的桌子: treatment individual phase dist_mean track 1 control 1 pre 13.33 569.99 2 control 1 post 10.95 624.65 3 control 2 pre 9.93 363.35 4 control 2 post 10.11 339.88 5 contr
treatment individual phase dist_mean track
1 control 1 pre 13.33 569.99
2 control 1 post 10.95 624.65
3 control 2 pre 9.93 363.35
4 control 2 post 10.11 339.88
5 control 3 pre 12.00 676.42
6 control 3 post 12.80 939.15
原则上,两行始终成对。我需要从样本的前阶段减去后阶段的
dist_mean
。简单的方法是从1中减去第2行,依此类推。但考虑到这一顺序在任何时候都可能受到干扰,整个计算都会出错。这就是为什么我希望在两个阶段的治疗和个体匹配的条件下进行计算信息:治疗改变。它并不总是控制
使用聚合
:
aggregate(dist_mean ~ treatment + individual, df1, function(x) diff(rev(x)))
# treatment individual dist_mean
#1 control 1 2.38
#2 control 2 -0.18
#3 control 3 -0.80
数据
df1 <- read.table(text = "
treatment individual phase dist_mean track
1 control 1 pre 13.33 569.99
2 control 1 post 10.95 624.65
3 control 2 pre 9.93 363.35
4 control 2 post 10.11 339.88
5 control 3 pre 12.00 676.42
6 control 3 post 12.80 939.15
", header = TRUE)
df1df%
枢轴宽度(c(治疗,个体),名称=相位,值=距离=平均值)%>%
变异(d=后-前)
#>#tibble:3 x 5
#>治疗前和治疗后d
#>
#>1控制1 13.3 11.0-2.38
#>2控制2 9.93 10.1 0.180
#>3控制3 12 12.8 0.8
由(v1.0.0)于2021-03-09创建
数据表
df 1:控制1 10.95 13.33-2.38
#>2:控制2 10.11 9.93 0.18
#>3:控制3 12.80 12.00 0.80
由(v1.0.0)使用data.table于2021-03-09创建,重新整形,然后获得后/前列中的差异:
library(data.table)
setDT(df1)
dcast(df1, treatment + individual ~ phase, value.var = c("dist_mean", "track")
)[, .(treatment, individual,
diff_dist_mean = dist_mean_post - dist_mean_pre,
diff_track = track_post - track_pre)]
# treatment individual diff_dist_mean diff_track
# 1: control 1 -2.38 54.66
# 2: control 2 0.18 -23.47
# 3: control 3 0.80 262.73
A数据表
选项
setDT(df)[
order(treatment, individual, phase)
][
,
setNames(lapply(.SD, diff), paste0("diff_", names(.SD))),
by = .(treatment, individual),
.SDcols = c("dist_mean", "track")
]
给予
使用重塑
transform(
reshape(
df,
direction = "wide",
idvar = c("treatment", "individual"),
timevar = "phase"
),
diff_dist_mean = dist_mean.pre - dist_mean.post,
diff_track = track.pre - track.post
)
给予
transform(
reshape(
df,
direction = "wide",
idvar = c("treatment", "individual"),
timevar = "phase"
),
diff_dist_mean = dist_mean.pre - dist_mean.post,
diff_track = track.pre - track.post
)
treatment individual dist_mean.pre track.pre dist_mean.post track.post
1 control 1 13.33 569.99 10.95 624.65
3 control 2 9.93 363.35 10.11 339.88
5 control 3 12.00 676.42 12.80 939.15
diff_dist_mean diff_track
1 2.38 -54.66
3 -0.18 23.47
5 -0.80 -262.73