计算总体积的差异

时间:2019-04-09 21:23:12

标签: r calculated-columns

我有一个针对单个大脑部分(视神经叶,嗅叶,听觉皮层等)计算出的体积,所有这些部分的体积合计为大脑的总体积。我想进行一些分析,为此,我需要进行一些扣除。例如:(“ 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 个答案:

答案 0 :(得分:2)

你可以

df.groupby('year')['value'].apply(lambda x: x.nlargest(2)).reset_index()

答案 1 :(得分: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