#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)