R: dplyr :: mutate em linha usando função que pega uma linha do quadro de dados e retorna um número inteiro
Estou tentando usar a instrução de alteração de pipe usando uma função personalizada. Eu parecia um pouco semelhanteSO post mas em vão. Digamos que eu tenha um quadro de dados como este (ondeblob
é uma variável não relacionada à tarefa específica, mas faz parte de todos os dados):
df <-
data.frame(exclude=c('B','B','D'),
B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0),
blob=c('fd', 'fs', 'sa'),
stringsAsFactors = F)
Eu tenho uma função que usa os nomes de variáveis, então selecione alguns com base no valor noexclude
coluna e p. calcula uma soma nas variáveis não especificadas emexclude
(que é sempre um caractere único).
FUN <- function(df){
sum(df[c('B', 'C', 'D')] [!names(df[c('B', 'C', 'D')]) %in% df['exclude']] )
}
Quando eu der uma única linha (linha 1) paraFUN
Eu recebo a soma esperada deC
eD
(aqueles não mencionados porexclude
), nomeadamente 4:
FUN(df[1,])
Como faço da mesma forma em um pipe com mutate (adicionando o resultado a uma variávels
) Essas duas tentativas não funcionam:
df %>% mutate(s=FUN(.))
df %>% group_by(1:n()) %>% mutate(s=FUN(.))
ATUALIZAR Isso também não funciona conforme o esperado:
df %>% rowwise(.) %>% mutate(s=FUN(.))
Isso funciona de causa, mas não está dentro do mutate (e pipes) do dplyr:
df$s <- sapply(1:nrow(df), function(x) FUN(df[x,]))