减去并求出一个值或数量的差

问题描述 投票:0回答:2

我对大脑各部分(视神经叶,嗅叶,听觉皮层等)进行了体积测量,所有这些部分的总和将达到大脑的总体积。如此处的示例数据框所示。

a   b   c   d   e   total
1   2   3   4   5   15
2   3   4   5   6   20
4   6   7   8   9   34
7   8   10  10  15  50

如果我从总体积中减去一种成分,我想找到大脑体积的差异。所以我想知道如何在R中进行操作,而不必为每个脑部创建新的列。

For example: (total - a = 14, total - b =13, and so on for other components).

total-a total-b total-c total-d total-e
14      13      12      11      10
18      17      16      15      14
30      28      27      26      25
43      42      40      40      35
r calculated-columns
2个回答
2
投票

您可以做

dat[, "total"] - dat[1:5]
#   a  b  c  d  e
#1 14 13 12 11 10
#2 18 17 16 15 14
#3 30 28 27 26 25
#4 43 42 40 40 35

1
投票

如果您还想要列名,那么tidyverse的可能性可能是:

df %>%
 gather(var, val, -total) %>%
 mutate(var = paste0("total-", var),
        val = total - val) %>%
 spread(var, val)

  total total-a total-b total-c total-d total-e
1    15      14      13      12      11      10
2    20      18      17      16      15      14
3    34      30      28      27      26      25
4    50      43      42      40      40      35

如果您不关心列名,那么只需使用dplyr,您就可以做到:

df %>%
 mutate_at(vars(-matches("(total)")), list(~ total - .))

   a  b  c  d  e total
1 14 13 12 11 10    15
2 18 17 16 15 14    20
3 30 28 27 26 25    34
4 43 42 40 40 35    50

或不带base R的列名:

df[, grepl("total", names(df))] - df[, !grepl("total", names(df))] 

   a  b  c  d  e
1 14 13 12 11 10
2 18 17 16 15 14
3 30 28 27 26 25
4 43 42 40 40 35
© www.soinside.com 2019 - 2024. All rights reserved.