10 Saker du kan göra i R som du skulle ha gjort i Microsoft Excel

10 Saker du kan göra i R som du skulle ha gjort i Microsoft Excel - dummies

Kalkylbladet är förmodligen en av de mest använda PC-applikationerna - och med goda skäl: Kalkylblad gör det mycket enkelt att utföra beräkningar och andra operationer på tabell data. Men kalkylblad utgör också vissa risker: De är lätta att korrupta och mycket svåra att felsöka. Den goda nyheten är att du kan använda R för att göra många av samma saker som du brukade göra i kalkylblad.

Lägga till rad och kolumn Totals

En uppgift som du ofta gör i ett kalkylblad beräknar rad eller kolumn totals. Det enklaste sättet att göra detta är att använda funktionerna rowSums () och colSums (). På samma sätt använder du rowMeans () och colMeans () för att beräkna medel.

Prova det på den inbyggda datasettens iris. Först, ta bort den femte kolumnen, eftersom den innehåller text som beskriver arten av iris: >> iris. num <- iris [ -5]

 Beräkna summan och medelvärdet för varje kolumn: 

>> colSums (iris. Num)> colMeans (iris. Num)

Dessa två funktioner är mycket praktiska, men du kanske vill beräkna någon annan statistik för varje kolumn eller rad. Det finns ett enkelt sätt att kryptera rader eller kolumner i en array eller dataram: funktionen () (). Till exempel, att få minst en kolumn är samma som att tillämpa min () -funktionen till den andra dimensionen av dina data: >> tillämpa (iris nr, 2, min)> tillämpa (iris nr, 2, max)
 Formateringsnummer 

 Du kan använda formatet () för att sätta dina nummer i vacker text, redo för utskrift. Denna funktion tar ett antal argument för att styra formatet på ditt resultat. Här är några: 

trim

:

Ett logiskt värde. Om det är felaktigt lägger det till mellanslag för att rättfatta resultatet. Om TRUE, det undertrycker de ledande utrymmena.

  • siffror : Hur många signifikanta siffror av numeriska värden som ska visas.

  • nsmall : Minsta antal siffror efter decimal.

  • Dessutom kontrollerar du formatet för decimaltalet med decimal. markera markeringen mellan intervallerna före decimaltalet med stort. markera och märket mellan intervall

efter decimaltalet med litet. markera. Till exempel kan du skriva ut numret 12345. 6789 med ett komma som decimal, mellanslag som det stora märket och prickar som småmärket: >> format (12345, 6789, siffror = 9, decimaltal. mark = ",", + stor. mark = "", liten. mark = ".", liten .intervall = 3) [1] "12 345, 678. 9" Som ett mer praktiskt exempel medel för vissa kolumner i mtcars och sedan skriva ut resultaten med två siffror efter decimalpunkten, använd följande: >> x format (x, siffror = 2, nsmall = 2) mpg cyl disp hp "20.09 "" 6. 19 "" 230. 72 "" 146. 69 " Observera att resultatet inte längre är ett nummer utan en textsträng. Var därför försiktig när du använder nummerformatering - detta borde vara det sista steget i ditt rapporterings arbetsflöde.

Om du är bekant med programmering på språk som liknar C eller C ++, kan du också hitta funktionen sprintf (). Med denna omslag kan du klistra in ditt formaterade nummer direkt i en sträng.

 Här är ett exempel på att konvertera siffror till procentandelar:  >> x sprintf ("%. 1f %%", 100 * x) [1] "50. 0% "" 51. 0% "" 52. 0% "" 53. 0% "" 54. 0% "" 55. 0% "

Det här är vad det gör: Det första argumentet till sprintf () anger formatet - i det här fallet"%. 1f %% ". Formatargumentet använder speciella bokstäver som indikerar att funktionen ska ersätta denna bokstav med en variabel och tillämpa viss formatering. Bokstäverna börjar alltid med% -symbolen. Så, i det här fallet,%. 1f innebär att formatera det första tillförda värdet som ett fast punktvärde med en siffra efter decimalpunkten, och %% är en bokstavlig som betyder utskrift a%.

 För att formatera vissa siffror som valuta - i detta fall, US-dollar - använd:  >> set. frö (1)> x sprintf ("$% 3. 2f", x) [1] "$ 265. 51" "$ 372. 12" "$ 572. 85" "$ 908. 21" "$ 201. 68 "

Funktionen sprintf () ger dig ett alternativt sätt att klistra in värdet på en variabel i en sträng: >> prissumma sprintf ("% s kostnad $% 3. 2f ", saker, pris) [1 ] "Bröd kostar $ 2. 10" "kakor kostar $ 4. 00"

Vad händer här är det eftersom du gav två vektorer (vardera med två element) till sprintf (), är resultatet ett vektor med två element . R cyklar genom elementen och placerar dem i sprintf () bokstäverna.

Du kan göra allt med pasta () och format () som du kan göra med sprintf (), så du behöver inte riktigt använda den. Men när du gör det kan det förenkla din kod.

 Sortera data 

För att sortera data i R, använder du funktionen sort () eller order ().

För att sortera datarammens mtcars i ökande eller minskande ordning för kolumnen hp, använd: >> med (mtcars, mtcars [order (hp),))> med (mtcars, mtcars [order (hp, minskande = TRUE),])

 Gör val med om 

Kalkylblad ger dig möjlighet att utföra alla typer av "Vad händer om? "Analyserar. Ett sätt att göra detta är att använda funktionen if () i ett kalkylblad.

 R har också if () -funktionen, men används mest för flödesstyrning i dina skript. Eftersom du vanligtvis vill utföra en beräkning på en hel vektor i R, är det vanligtvis lämpligare att använda funktionen ifelse (). 

Här är ett exempel på att använda ifelse () för att identifiera bilar med hög bränsleeffektivitet i datasetet mtcars: >> mtcars <- transform (mtcars, + mpgClass = ifelse (mpg mtcars [mtcars $ mpgClass == "High" ,]

Beräkning av villkorliga totaler

Något annat som du förmodligen gjorde mycket i Excel beräknar villkorliga summor och räknar med funktionerna sumif () och countif ().

Du kan göra samma sak i en av två sätt i R:

Använd ifelse.

 Beräkna enkelt måttet av intresse på en delmängd av dina data. 

Säg att du vill beräkna ett villkorligt medelvärde av bränsleeffektivitet i mtcars. Du gör detta med medelvärdet (). För att få bränsleeffektiviteten för bilar på vardera sidan av ett tröskelvärde på 150 hästkrafter, försök följande: >> med (mtcars, mean (mpg)) [1] 20. 09062> med (mtcars, mean (mpg [ hp med (mtcars, mean (mpg [hp> = 150])) [1] 15. 40667

Att räkna antalet element i en vektor är detsamma som att fråga om dess längd. Det betyder att Excel-funktionen countif ) har en R ekvivalent längd (): >> med (mtcars, längd (mpg [hp> 150])) [1] 13

Överför kolumner eller rader

Ibland behöver du transponera dina data från rader till kolumner eller vice versa. I R är funktionen att transponera en matris t (): >> xx [ 1] [ 2] [ 3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12

 För att få transponeringen av en matris, använd t ():  >> t (x) [ 1] [ 2] [ 3] [ 4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 

Du kan också använda t () för att transponera datarammer, men var försiktig när du Gör så här. Resultatet av ett införlivande är alltid en matris (eller array). Eftersom arrayer alltid har bara en typ av variabel, till exempel numerisk eller tecken, kanske inte de olika typerna av dina resultat är vad du förväntar dig.

Hitta unika eller duplicerade värden

Använd unika () -funktionen om du vill identifiera alla unika värden i dina data. Försök hitta de unika värdena på antalet cylindrar i mtcars: >> unik (mtcars $ cyl) [1] 6 4 8

  • Ibland vill du veta vilka värden av dina data som är duplicerade. Beroende på din situation kommer dessa dubbletter att vara giltiga, men ibland kan dubbla poster ange datapostproblem.

  • Funktionen för att identifiera dubbla poster är duplicerad (). I den inbyggda datasettens iris finns en dubblett rad i rad 143. Prova själv: >> dupeshuvud (dupes) [1] FALSK FALSK FALSK FALSK FALSK FALSK> vilken (dupes) [1] 143> iris [dupes] Sepal. Längd Sepal. Bredd Kronblad. Längd kronblad Bredd Arter 143 5.8 2. 7 5. 1 1. 9 virginica

Eftersom resultatet av duplicerat () är en logisk vektor kan du använda den som ett index för att ta bort rader från dina data. För att göra detta, använd negationsoperatören - utropstecken (som i! Dupes): >> iris [! Dupes,]> nrow (iris [! dupes,]) [1] 149

 Arbeta med uppslagstabeller 

I en kalkylarksapplikation som Excel kan du skapa uppslagstabeller med funktionerna vallokup eller en kombination av index och matchning .

 I R kan det vara bekvämt att använda sammanslagning () eller matchning (). Funktionen match () returnerar en vektor med positionerna för element som matchar ditt uppslagsvärde. 

Till exempel, för att hitta platsen för elementet "Toyota Corolla" i radnamnen på MTV, prova följande: >> indexindex [1] 20> mtcars [index, 1: 4] mpg cyl disp hp Toyota Corolla 33. 9 4 71. 1 65

Arbeta med pivottabeller

 För enkla tabeller i R kan du använda funktionen tapply () för att uppnå liknande resultat som pivottabeller i Excel.Här är ett exempel på att använda tapply () för att beräkna genomsnittliga hk för bilar med olika antal cylindrar och redskap:  >> med (mtcars, tapply (hp, lista (cyl, växel), medelvärde)) 3 4 5 4 97. 0000 76. 0 102. 0 6 107. 5000 116. 5 175. 0 8 194. 1667 NA 299. 5 

För lite mer komplexa tabeller - det vill säga bord med mer än två korsklassificeringsfaktorer - använd aggregatet () funktion: >> aggregat (hp ~ cyl + växel + am, mtcars, medelvärde) cyl gear am hp 1 4 3 0 97. 00000 2 6 3 0 107. 50000 3 8 3 0 194. 16667 4 4 4 0 78. 50000 5 6 4 0 123. 00000 6 4 4 1 75. 16667 7 6 4 1 110. 00000 8 4 5 1 102. 00000 9 6 5 1 175. 00000 10 8 5 1 299. 50000

 Användning målsökningen och lösaren 

I R ger funktionen optimera () en ganska enkel mekanism för att optimera funktioner.

Tänk dig att du är försäljningschef för ett företag och du måste ange det bästa priset för din produkt. Med andra ord, hitta priset på en produkt som maximerar intäkterna.

I ekonomi anges att en enkel prismodell anger att människor köper mindre av en viss produkt när priset ökar. Här är en mycket enkel funktion som har detta beteende: >> försäljning <- funktion (pris) {100 - 0. 5 * pris}

 Förväntad omsättning är då helt enkelt produkt av pris och förväntad försäljning:  >> intäkter <- funktion (pris) {pris * försäljning (pris)} 

Du kan använda kurvan () för att plotta kontinuerliga funktioner. Detta tar en funktion som ingång och ger en plot. Försök att plotta uppförandet av försäljning och intäkter med funktionen kurva (), varierande pris från $ 50 till $ 150: >> oldpar-kurva (försäljning, från = 50 till 150, xname = "pris", huvud = "Försäljning ")> Kurva (intäkter, från = 50 till = 150, xname =" pris ", huvud =" intäkter ")> par (oldpar)

Ditt resultat ska likna detta.

 En modell av förväntade försäljningar och intäkter. 

Du har en fungerande modell för försäljning och intäkter. Du kan se omedelbart att det finns en punkt med maximal intäkt. Använd sedan R-funktionen optimera () för att hitta värdet av det maximala. För att använda optimera () måste du berätta vilken funktion som ska användas (i detta fall intäkter ()) samt intervallet (i det här fallet priser mellan 50 och 150). Som standard optimerar () sökningar efter ett minimivärde, så i det här fallet måste du berätta för att söka efter maximalt värde: >> optimera (intäkter, intervall = c (50, 150), maximalt = TRUE) $ maximum [1] 100 $ mål [1] 5000

 Och där går du. Ladda upp ett pris på $ 100, och förvänta dig att få $ 5, 000 i intäkter.