Muitas vezes, pode querer utilizar o aplicar() para aplicar uma função a colunas específicas num quadro de dados em R.
No entanto, o aplicar() força primeiro todas as colunas de um quadro de dados a terem o mesmo tipo de objeto antes de aplicar uma função, o que por vezes pode ter consequências indesejadas.
Uma melhor escolha é o lapply() que utiliza a seguinte sintaxe básica:
df[c(' col1 ', ' col2 ')] <- lapply(df[c(' col1 ', ' col2 ')], minha_função)
Este exemplo específico aplica a função minha_função apenas para col1 e col2 no quadro de dados.
O exemplo seguinte mostra como utilizar esta sintaxe na prática.
Exemplo: Aplicar função a colunas específicas de um quadro de dados
Suponhamos que temos o seguinte quadro de dados no R:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'), points=c(19, 22, 15, NA, 14, 25, 25, 25), rebounds=c(10, 6, 3, 7, 11, 13, 9, 12), assists=c(4, 4, 3, 6, 7, 5, 10, 8)) #view data frame df team points rebounds assists 1 A 19 10 4 2 A 22 6 4 3 A 15 3 3 4 A NA 7 6 5 B 14 11 7 6 B 25 13 5 7 B 25 9 10 8 B 25 12 8
Agora suponhamos que definimos a seguinte função que multiplica valores por 2 e depois adiciona 1:
#definir função minha_função <- função (x) x*2 + 1
Podemos utilizar o seguinte lapply() para aplicar esta função apenas ao pontos e ressaltos colunas no quadro de dados:
#aplicar a função a colunas específicas df[c(' pontos ', ' ressaltos ')] <- lapply(df[c(' pontos ', ' ressaltos ')], my_function) #ver quadro de dados atualizado df equipa pontos ressaltos assistências 1 A 39 21 4 2 A 45 13 4 3 A 31 7 3 4 A NA 15 6 5 B 29 23 7 6 B 51 27 5 7 B 51 19 10 8 B 51 25 8
A partir do resultado, podemos ver que multiplicámos cada valor no pontos e ressaltos colunas por 2 e depois adicionou 1.
Repare também que o equipa e assistências colunas permaneceram inalteradas.