10 coisas que você pode fazer em R que você teria feito no Microsoft Excel

A planilha é provavelmente um dos aplicativos para PC mais utilizados - e por uma boa razão: Spreadsheets torná-lo muito fácil de executar cálculos e outras operações em dados tabulares. Mas planilhas representar alguns riscos, bem como: Eles são fáceis de corromper e muito difícil de depurar. A boa notícia é que você pode usar R para fazer muitas das mesmas coisas que você costumava fazer em planilhas.

Adição de linha e coluna totais

Uma tarefa que você pode, freqüentemente, fazer em uma planilha está calculando linha ou coluna totais. A maneira mais fácil de fazer isso é usar as funções rowSums () e colSums (). Do mesmo modo, utilizar rowMeans () e colMeans () meios para calcular.

Tente-a no conjunto de dados built-in íris. Primeiro, remova a quinta coluna, porque contém texto que descreve as espécies de íris:

> iris.num lt; - iris [, -5]

Em seguida, calcular a soma ea média para cada coluna:

> colSums (iris.num)> colMeans (iris.num)

Estas duas funções são muito convenientes, mas você pode querer calcular alguma outra estatística para cada coluna ou linha. Não há uma maneira fácil de atravessar linhas ou colunas de uma matriz ou estrutura de dados: o aplicar() função. Por exemplo, ficando o mínimo de uma coluna é o mesmo que uma aplicação min () função para a segunda dimensão de seus dados:

> Aplicar (iris.num, 2, min)> se candidatar (iris.num, 2, max)

formatar números

Você pode usar formato() para transformar seus números no texto bonito, pronto para impressão. Esta função tem uma série de argumentos para controlar o formato do seu resultado. Aqui estão algumas delas:

  • aparar: Um valor lógico. E se FALSO, ele adiciona espaços para a direita; justificar o resultado. E se VERDADE, ele suprime os espaços à esquerda.

  • dígitos: Quantos dígitos significativos de valores numéricos para mostrar.

  • nsmall: O número mínimo de dígitos depois do ponto decimal.

Além disso, você controlar o formato do ponto decimal com decimal.mark, a marca entre os intervalos antes o ponto decimal com big.mark, ea marca entre os intervalos depois de o ponto decimal com small.mark.

Por exemplo, você pode imprimir o número 12345.6789 com uma vírgula como ponto decimal, espaços como a grande marca, e pontos como a pequena marca:

> Formato (12345.6789, dígitos = 9, decimal.mark = # 147 -, nº 148 -, + big.mark = # 147- # 147-, small.mark = # 147 -. # 148-, small.interval = 3) [1] # 147-12 345,678.9 # 148-

Como um exemplo mais prático, para calcular o meio de algumas colunas mtcars e, em seguida, imprimir os resultados com dois dígitos depois do ponto decimal, use o seguinte:

> x lt; - colMeans (mtcars [, 1: 4])> formato (x, dígitos = 2, nsmall = 2) mpg cil disphp # 147- 20.09 # 148- # 147- 6,19 # 148- # 147-230,72 # 148- # 147-146,69 # 148-

Observe que o resultado não é mais um número, mas uma cadeia de texto. Portanto, tenha cuidado ao usar o número de formatação - este deve ser o último passo no seu fluxo de trabalho de relatório.

Se você estiver familiarizado com a programação em linguagens semelhantes ao C ou C ++, então você também pode encontrar o sprintf () função útil. Esta embalagem permite que você cole o seu número formatado diretamente em uma string.

Aqui está um exemplo de conversão de números em percentagens:

> x lt; - SEQ (0,5, 0,55, 0,01)> sprintf (147 # -% 1f # %% 148-, 100 * X.) [1] # 147-50,0% # 148- # 147-51,0% # 148- # 147-52,0% # 148- # 147-53,0% # 148- # 147-54,0% # 148- # 147-55,0% # 148-

Isto é o que ele faz: O primeiro argumento para sprintf () indica o formato - neste caso, # 147-% .1f %%# 148-. O argumento formato usa literais especiais que indicam que a função deve substituir este literal com uma variável e aplicar alguma formatação. Os literais sempre começam com o % símbolo. Assim, neste caso, % .1f significa para formatar o primeiro valor fornecido como um valor de ponto fixo com um dígito depois do ponto decimal, e %% é um literal que significa imprimir uma %.

Para formatar alguns números como moeda - neste caso, o dólar americano - use:

> Set.seed (1)> X lt; - 1000 * runif (5)> sprintf (147- #% $ 3.2f # 148-, x) [1] # 147- $ 265,51 # 148- # 147- $ 372,12 # 148- # 147- $ 572,85 # 148- # 147- $ 908,21 # 148- # 147- $ 201,68 # 148-

o sprintf () função dá-lhe uma forma alternativa de colar o valor de qualquer variável em uma string:

> material lt; - c (# 147-pão # 148-, Número 147-cookies Nº 148 -)> preço lt; - c (2,1, 4)> sprintf (# 147-% s custo de US $% 3.2f # 147-, material, preço) [1] # 147-pão custo de US $ 2,10 # 147- # 147-cookies custar US $ 4,00 # 147-

O que acontece aqui é que, porque você forneceu dois vetores (cada um com dois elementos) para sprintf (), o resultado é um vetor com dois elementos. ciclos R através dos elementos e coloca-los na sprintf () literais.

Você pode fazer tudo com colar() e formato() que você pode fazer com sprintf (), assim que você realmente não precisar usá-lo. Mas quando o fizer, ele pode simplificar o seu código.

classificação de dados

Para classificar os dados em R, utiliza o ordenar() ou ordem() funções.

Para classificar a estrutura de dados mtcars em ordem crescente ou decrescente da coluna hp, usar:

> Com (mtcars, mtcars [ordem (hp),])> com (mtcars, mtcars [Ordem (hp, diminuindo = TRUE),])

Fazer escolhas com se

Planilhas dar-lhe a capacidade de executar todos os tipos de Nº 147-E se? # 148- analisa. Uma maneira de fazer isso é usar o E se() função em uma planilha.

R também tem a E se() função, mas é principalmente utilizado para controle de fluxo em seus scripts. Porque você geralmente deseja executar um cálculo em um vetor inteiro em R, é geralmente mais adequado utilizar a ifelse () função.

Aqui está um exemplo do uso ifelse () para identificar carros com alta eficiência de combustível no conjunto de dados mtcars:

> mtcars lt; - transformação (mtcars, + mpgClass = ifelse (mpg lt; significa (mpg), # 147-Low # 148-, # 147 de alta # 148 -))> mtcars [mtcars $ mpgClass == # 147 de alta # 148-,]

Calcular totais condicionais

Outra coisa que você provavelmente fez muito em Excel está a calcular somas condicionais e conta com as funções sumif () e countif ().

Você pode fazer a mesma coisa em uma das duas maneiras em R:

  • Usar ifelse.

  • Basta calcular a medida de interesse em um subconjunto de seus dados.

Digamos que você queira calcular a média condicional da eficiência do combustível em mtcars. Você pode fazer isso com o significar() função. Agora, para obter a eficiência de combustível para carros de ambos os lados de um limiar de 150 cavalos de potência, tente o seguinte:

> Com (mtcars, média (mpg)) [1] 20.09062> com (mtcars, média (mpg [hp lt; 150])) [1] 24,22353> com (mtcars, média (mpg [hp> = 150])) [1] 15,40667

Contar o número de elementos de um vector é o mesmo que perguntar sobre o seu comprimento. Isto significa que a função do Excel countif () tem um equivalente em R comprimento():

> Com (mtcars, comprimento (mpg [hp> 150])) [1] 13

Transpondo colunas ou linhas

Às vezes você precisa de transpor seus dados de linhas para colunas ou vice-versa. Em R, a função de transposição de uma matriz é T ():

> x lt; - matriz (01:12, Ncol = 3)> X [, 1] [, 2] [, 3] [1,] 1 5 9 [2], 2 6 10 [3,] 3 7 11 [4 ,] 4 8 12

Para chegar a transposta de uma matriz, o uso T ():

> T (X) [, 1] [, 2] [, 3] [, 4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12

Você também pode usar T () para transpor os quadros de dados, mas tenha cuidado quando você faz isso. O resultado de uma transposição é sempre uma matriz (ou matriz). Como os arrays sempre tem apenas um tipo de variável, como numérico ou caráter, os tipos de variáveis ​​de seus resultados podem não ser o que você espera.

Encontrando valores exclusivos ou duplicados

Para identificar todos os valores exclusivos em seus dados, utilize o única () função. Tente encontrar os valores exclusivos de número de cilindros em mtcars:

> Únicos (mtcars $ cil) [1] 6 4 8

Às vezes você quer saber quais os valores de seus dados são duplicados. Dependendo da sua situação, as duplicatas serão válidos, mas às vezes as entradas duplicadas podem indicar problemas de entrada de dados.

A função para identificar entradas duplicadas é duplicado (). No conjunto de dados built-in íris, há uma linha duplicada na linha 143. Tente você mesmo:

> dupes lt; - duplicados (íris)> cabeça (dupes) [1] false false false false false false> que (dupes) [1] 143> iris [dupes,] Sepal.Length Sepal.Width Petal.Length Petal.Width Species143 5,8 2,7 5,1 1,9 virginica

Uma vez que o resultado de duplicado () é um vetor lógico, você pode usá-lo como um índice para remover linhas de seus dados. Para fazer isso, use o operador de negação - o ponto de exclamação (como no !dupes):

> Iris [! Tolos,]> nrow (íris [! Engana,]) [1] 149

Trabalhando com tabelas de pesquisa

Em um aplicativo de planilhas como o Excel, você pode criar tabelas de pesquisa com as funções vlookup ou uma combinação de índice e partida.

Em R, pode ser conveniente usar merge () ou partida(). o partida() função retorna um vetor com as posições de elementos que correspondem à sua valor de pesquisa.

Por exemplo, para encontrar a localização do elemento # 147-Toyota Corolla# 148- nos nomes de linha de mtcars, tente o seguinte:

> index lt; - jogo (# 147-Toyota Corolla # 148-, rownames (mtcars))> índice [1] 20> mtcars [índice, 1: 4] mpg cil disp hpToyota Corolla 33,9 4 71,1 65

Trabalhando com tabelas dinâmicas

Para tabelas simples em R, você pode usar o tapply () função para obter resultados semelhantes para rodar tabelas no Excel. Aqui está um exemplo do uso tapply () para calcular significativo hp para carros com diferentes números de cilindros e engrenagens:

> Com (mtcars, tapply (hp, lista (cyl, engrenagem), média)) 3 4 54 97,0000 76,0 102,06 107,5000 116,5 175,08 194,1667 NA 299,5

Para tabelas ligeiramente mais complexos - ou seja, tabelas com mais de dois fatores de classificação cruzada - usar o agregar() função:

> Agregada (cv ~ cil + engrenagem + am, mtcars, média) engrenagem cil amhp1 4 3 0 97,000002 6 3 0 107,500003 8 3 0 194,166674 4 4 0 78,500005 6 4 0 123,000006 4 4 1 75,166677 6 4 1 110,000008 4 5 1 102,000009 6 5 1 5 1 8 175,0000010 299,50000

Usando a meta buscar e solver

Em R, o otimizar () função fornece um mecanismo bastante simples para otimizar funções.

Imagine que você é o diretor de vendas de uma empresa e você precisa definir o melhor preço para o seu produto. Em outras palavras, encontrar o preço de um produto que maximiza a receita.

Em economia, um modelo simples de estados de preços que as pessoas compram menos de um determinado produto quando o preço aumenta. Aqui está uma função muito simples que tem esse comportamento:

> vendas lt; - função (preço) {100 - 0,5 * Preço}

receita esperada é então simplesmente o produto de preço e vendas esperadas:

> receita lt; - função (preço) {preços * vendas (preço)}

Você pode usar o curva() função para traçar funções contínuas. Isso leva uma função como entrada e produz um enredo. Tente traçar o comportamento de vendas e da receita usando o curva() função, preço de $ 50 a $ 150 variando:

> oldpar lt; - par (mfrow = c (1, 2), bty = # 147-l # 148 -)> curva (de vendas, desde = 50, a = 150, XName = # 147-preço # 148-, principal = # 147-Sales # 148 -)> curva (receitas, a partir = 50, a = 150, XName = # 147-preço # 148-, principal = # 147-Receita # 148 -)> par (oldpar)

Seus resultados deve ser semelhante a este.

Um modelo de vendas e receitas previstas.
Um modelo de vendas e receitas previstas.

Você tem um modelo de trabalho de vendas e receitas. Você pode ver imediatamente que há um ponto de máximo rendimento. Em seguida, use a função R otimizar () para encontrar o valor dessa máxima. Usar otimizar (), você precisa dizer a ele que funcionam para usar (neste caso, receita()), Bem como o intervalo (neste caso, os preços entre 50 e 150). Por padrão, otimizar () procura por um valor mínimo, então neste caso você tem que dizer a ele para procurar valor máximo:

> Otimizar (receitas, intervalo = c (50, 150), = TRUE máximo) $ máxima [1] 100 $ objectivo [1] 5000

E lá vai você. Cobrar um preço de US $ 100, e espera obter US $ 5.000 em receita.

menu