#r #calculated-columns
#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
Я хотел бы найти разницу в объеме мозга, если я вычту один компонент из общего объема.
Итак, мне было интересно, как это сделать в 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
Ответ №1:
Вы можете сделать
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
Ответ №2:
Если вам нужны также имена столбцов, то одной 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
Если вас не волнуют имена столбцов, то с помощью just 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