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