Я пытаюсь создать новый столбец, который будет содержать результат вычислений, выполненных по строке над подмножеством столбцов таблицы, и добавить этот новый столбец к существующему столбцу.Примерно так:
df <- tibble(
ID = c("one", "two", "three"),
A1 = c(1, 1, 1),
A2 = c(2, 2, 2),
A3 = c(3, 3, 3)
)
Я действительно хочу сделать dplyr-эквивалент этого кода из базы R:
df$SumA <- rowSums(df[,grepl("^A", colnames(df))])
Моя проблема в том, что это не работает:
df %>%
select(starts_with("A")) %>%
mutate(SumA = rowSums(.))
# some code here
... потому что я избавился от столбца «ID», чтобы позволить mutate запускать rowSums над другими (числовыми) столбцами.Я пытался cbind или bind_cols в трубе после mutate, но это не работает.Ни один из вариантов мутации не работает, потому что они работают на месте (внутри каждой ячейки таблицы, а не поперек столбцов, даже со строкой).
Это работает, но не поражает меня какэлегантное решение:
df %>%
mutate(SumA = rowSums(.[,grepl("^A", colnames(df))]))
Существует ли какое-либо решение на основе тидиверса, которое не требует grepl или квадратных скобок, а только содержит более стандартные глаголы и параметры dplyr?
Мой ожидаемый результат такой:
df_out <- tibble(
ID = c("one", "two", "three"),
A1 = c(1, 1, 1),
A2 = c(2, 2, 2),
A3 = c(3, 3, 3),
SumA = c(6, 6, 6)
)
Бест кДж