根据列值腐蚀性减去嵌套在数据框中的行 [英] subtracting rows nested in a data.frame based on column value corrospondence

查看:22
本文介绍了根据列值腐蚀性减去嵌套在数据框中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于study的每个唯一值,我想知道如何从interval_id中相应的yi具有group != "C"group == "C"行中减去group == "C"行的group == "C"

例如,在study == 1中,interval_id == 0group == "C"yi == .4应该从group == "T1"yi == .1中减去。

同样,在study == 1中,interval_id == 1group == "C"yi == .5应该从yi == .3group == "T1"中减去interval_id == 1yi == .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
"

推荐答案

我们可以将每个studyWHEREgroup != 'C'中的yi值与yiWHEREgroup = '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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆