从每行中减去第一个或第二个值 [英] subtract first or second value from each row

查看:99
本文介绍了从每行中减去第一个或第二个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用dplyr处理数据,对数据进行分组后,我想将组中的第一个或第二个值减去所有值(即减去基准)。

I'm manipulating my data using dplyr, and after grouping my data, I would like to subtract all values by the first or second value in my group (i.e., subtracting a baseline). Is it possible to perform this in a single pipe step?

MWE:

test <- tibble(one=c("c","d","e","c","d","e"), two=c("a","a","a","b","b","b"), three=1:6)
test %>% group_by(`two`) %>% mutate(new=three-three[.$`one`=="d"])

我想要的输出是:

# A tibble: 6 x 4
# Groups:   two [2]
  one   two   three   new
  <chr> <chr> <int> <int>
1 c     a         1    -1
2 d     a         2     0
3 e     a         3     1
4 c     b         4    -1
5 d     b         5     0
6 e     b         6     1

但是我将其作为输出:

# A tibble: 6 x 4
# Groups:   two [2]
  one   two   three   new
  <chr> <chr> <int> <int>
1 c     a         1    -1
2 d     a         2    NA
3 e     a         3     1
4 c     b         4    -1
5 d     b         5    NA
6 e     b         6     1


推荐答案

我们可以先使用 来自 dplyr

test %>%
   group_by(two) %>% 
   mutate(new=three- first(three))
# A tibble: 6 x 4
# Groups: two [2]
#  one   two   three   new
#  <chr> <chr> <int> <int>
#1 c     a         1     0
#2 d     a         2     1
#3 e     a         3     2
#4 c     b         4     0
#5 d     b         5     1
#6 e     b         6     2






如果我们将'三个值基于'one'中的字符串 c,则我们不需要。$ ,因为它将获得整个列'c'而不是其中的值分组依据列


If we are subsetting the 'three' values based on string "c" in 'one', then we don't need .$ as it will get the whole column 'c' instead of the values within the group by column

test %>% 
   group_by(`two`) %>%
   mutate(new=three-three[one=="c"])

这篇关于从每行中减去第一个或第二个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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