R Language                
            Работа с колонкой
        
        
            
    Поиск…
сумма каждого столбца
 Предположим, нам нужно сделать sum каждого столбца в наборе данных 
set.seed(20)
df1 <- data.frame(ID = rep(c("A", "B", "C"), each = 3), V1 = rnorm(9), V2 = rnorm(9))
m1 <- as.matrix(df1[-1])
 Есть много способов сделать это. Используя base R , лучшим вариантом будет colSums 
colSums(df1[-1], na.rm = TRUE)
 Здесь мы удалили первый столбец, поскольку он не является числовым, и сделал sum каждого столбца, указав na.rm = TRUE (в случае, если в наборе данных есть любые NA) 
 Это также работает с matrix 
colSums(m1, na.rm = TRUE)
 Это можно сделать в петле с lapply/sapply/vapply 
 lapply(df1[-1], sum, na.rm = TRUE)
 Следует отметить, что вывод - это list . Если нам нужен vector вывод 
 sapply(df1[-1], sum, na.rm = TRUE)
Или же
 vapply(df1[-1], sum, na.rm = TRUE, numeric(1))
 Для матриц, если мы хотим перебирать столбцы, тогда используйте apply с MARGIN = 1 
 apply(m1, 2, FUN = sum, na.rm = TRUE)
 Есть способы сделать это с помощью таких пакетов, как dplyr или data.table 
 library(dplyr)
 df1 %>%
     summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)
 Здесь мы передаем регулярное выражение, чтобы соответствовать именам столбцов, которые нам нужны, чтобы получить sum в summarise_at . Регулярное выражение будет соответствовать всем столбцам, начинающимся с V за которым следует одно или несколько чисел ( \\d+ ). 
 data.table 
library(data.table)   
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), .SDcols = 2:ncol(df1)]
 Мы преобразуем «data.frame» в «data.table» ( setDT(df1) ), указали столбцы, в которых должна быть применена функция в .SDcols и петля через подмножество Data.table ( .SD ) и получить sum . 
Если нам нужно использовать группу по операции, мы можем сделать это легко, указав группу по столбцу / столбцам
 df1 %>%
   group_by(ID) %>%   
   summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)
 В случаях, когда нам нужна sum всех столбцов, summarise_each может использоваться вместо summarise_at 
df1 %>%
    group_by(ID) %>%
    summarise_each(funs(sum(., na.rm = TRUE)))
 Параметр data.table 
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), by = ID]