Рассчитать разницу в объеме общего объема - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть объем, рассчитанный для отдельных частей мозга (зрительная доля, обонятельная доля, слуховая кора и т. Д.), Объем всех частей будет добавлен к общему объему мозга.Я хотел бы провести некоторый анализ, для этого мне нужно некоторое вычитание.Например: ('total_brain_vol - объем оптического лепестка', 'total_brain_vol - объем обонятельного лепестка и т. Д.).Поэтому мне было интересно, как выполнить его в коде R, не создавая новый столбец для каждой части мозга.

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

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

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Вы можете сделать

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 голос
/ 10 апреля 2019

Если вам нужны также имена столбцов, то одна 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
...