根据列值腐蚀性减去嵌套在数据框中的行 [英] subtracting rows nested in a data.frame based on column value corrospondence
本文介绍了根据列值腐蚀性减去嵌套在数据框中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于study
的每个唯一值,我想知道如何从interval_id
中相应的yi
具有group != "C"
的group == "C"
行中减去group == "C"
行的group == "C"
例如,在study == 1
中,interval_id == 0
的group == "C"
的yi == .4
应该从group == "T1"
的yi == .1
中减去。
同样,在study == 1
中,interval_id == 1
的group == "C"
的yi == .5
应该从yi == .3
的group == "T1"
中减去interval_id == 1
的yi == .5
。
最终输出应该是删除了group == C
行的data.frame(如下)。
m = "
study group yi vi interval_id obs
1 T1 .1 1 0 1
1 T1 .3 2 1 2
1 C .4 3 0 3
1 C .5 4 1 4
2 T2 .6 5 0 5
2 C .9 6 1 6
"
data <- read.table(text=m,h=T)
# DESIRED OUTPUT:
"
study group yi vi interval_id obs
1 T1 -.3 . 0 1
1 T1 -.2 . 1 2
2 T2 -.3 . 0 5
2 C .9 . 1 6
"
推荐答案
我们可以将每个study
WHEREgroup != 'C'
中的yi
值与yi
WHEREgroup = 'C'
值相减。最后,删除group != 'C'
处的行。
library(dplyr)
data %>%
group_by(study) %>%
mutate(yi = rep(yi[group != 'C'] - yi[group == 'C'], 2)) %>%
ungroup() %>%
filter(group != 'C')
# study group yi vi interval_id obs
# <int> <chr> <dbl> <int> <int> <int>
#1 1 T1 -0.3 1 0 1
#2 1 T1 -0.2 2 1 2
#3 2 T2 -0.3 5 0 5
这篇关于根据列值腐蚀性减去嵌套在数据框中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文