R — суммируйте каждые два столбца в фрейме данных и вставляйте результаты в новые столбцы в конце

#r

#r

Вопрос:

У меня есть фрейм данных динамической длины, то есть он становится длиннее каждый раз, когда добавляются новые переменные. В этом случае мне нужно суммировать значения в каждых двух столбцах 8:length(df) и прикрепить результаты (сумму каждых двух столбцов) в конце этого фрейма данных. Итак, что я хочу автоматизировать для всех рассматриваемых столбцов, так это:

 df <- df %>%
mutate(sumAB = A   B)
 

В идеале я хотел бы назвать эти новые столбцы на основе вектора, содержащего предполагаемый colnames , который я уже подготовил. Поскольку я довольно новичок в R, я не смог запустить это с помощью циклов for или семейства apply. Каждое предложение приветствуется.
Спасибо!

Ответ №1:

Вы можете использовать split.default для разделения каждых двух столбцов, а затем lapply суммировать значения.

 cols <- 8:ncol(df)
result <- cbind(df[1:8], sapply(split.default(df[cols], 
                     rep(1:length(cols), each = 2, length.out = length(cols))), 
                     rowSums, na.rm = TRUE))
result
 

Комментарии:

1. Спасибо, это работает! Есть предложения по переименованию? Новые столбцы теперь называются V1: V41 — у меня есть символьное значение с 41 записью, которое я хочу вставить в имена столбцов.

2. вы можете сделать colnames(result)[9:ncol(result)] <- character_value

3. Отлично, спасибо. Я также только что нашел другое решение, возможно, чтобы легко подумать об этом в первую очередь: df <- rename_with(df, character_value)