У меня есть несколько столбцов. Некоторые из них содержат определенную строку, например «ABC DEF».
Мне нужна сумма столбцов, содержащих эту строку (я работаю с dplyr).
df <- data.frame("aaa" = 2:5, "bbb" = 1:4, "ABC_DEF" = 1:4, "DEF" = 2:5, "ABC_DEF_GHI" = 3:6, "aaa_ABC_DEF" = 2:5)
aaa bbb ABC_DEF DEF ABC_DEF_GHI aaa_ABC_DEF
1 2 1 1 2 3 2
2 3 2 2 3 4 3
3 4 3 3 4 5 4
4 5 4 4 5 6 5
Я пробовал что-то вроде этого:
df %>%
mutate(ABC_DEF = sum(select(c(contains("ABC_DEF")))))
При этом я получаю сообщение об ошибке: ! contains() должен использоваться в функции выбора.
Желаемый результат:
aaa bbb ABC_DEF_G DEF ABC_DEF_GHI aaa_ABC_DEF ABC_DEF
1 2 1 1 2 3 2 6
2 3 2 2 3 4 3 9
3 4 3 3 4 5 4 12
4 5 4 4 5 6 5 15
Может ли кто-нибудь помочь мне, как я могу это сделать?
Прошу прощения, я исправил.





Вы можете использовать комбинацию rowwise и c_across, чтобы выполнить задание.
library(dplyr)
df %>% rowwise() %>%
mutate(ABC.DEF.1 = sum(c_across(contains("ABC.DEF")))) %>%
ungroup()
# A tibble: 4 × 7
aaa bbb ABC.DEF DEF ABC.DEF.GHI aaa.ABC.DEF ABC.DEF.1
<int> <int> <int> <int> <int> <int> <int>
1 2 1 1 2 3 2 6
2 3 2 2 3 4 3 9
3 4 3 3 4 5 4 12
4 5 4 4 5 6 5 15
С dplyr и rowSums(),
require(dplyr)
df <- data.frame("aaa" = 2:5, "bbb" = 1:4, "ABC DEF" = 1:4, "DEF" = 2:5, "ABC DEF GHI" = 3:6, "aaa ABC DEF" = 2:5)
df %>%
select(contains('ABC.DEF')) %>%
mutate(ABC.DEF.SUM = rowSums(across(everything())))
Выход
ABC.DEF ABC.DEF.GHI aaa.ABC.DEF ABC.DEF.SUM
1 1 3 2 6
2 2 4 3 9
3 3 5 4 12
4 4 6 5 15
Не совсем то, что я искал, так как мне все еще нужны другие столбцы. Но все же очень полезно в других случаях. Спасибо!
Это невозможно воспроизвести, поскольку в именах столбцов (во фрейме данных) не должно быть пробелов.