For-Loop R DataFramessa

For Loop R Dataframessa



For-silmukka on ohjausrakenne, jonka avulla voimme toistaa joukon käskyjä tietyn määrän kertoja. Se on yleisesti käytetty menetelmä iterointiin R:ssä, varsinkin kun meidän on suoritettava sama toimenpide joillekin elementeille tai iteroitava tietorakenteen yli, kuten DataFramessa. Rivit ja sarakkeet muodostavat tietokehykset R:ssä, jossa jokainen rivi edustaa yhtä havaintoa ja jokainen sarake merkitsee kyseisen havainnon muuttujaa tai aspektia.

Tässä artikkelissa käytämme for-silmukkaa toistaaksemme DataFramea eri lähestymistavoissa. Huomaa, että for-loop iteraatio rivien ja sarakkeiden välillä voi olla erittäin laskennallista suurille DataFrame-kehyksille.







Esimerkki 1: For-Loop Over DataFrame -rivien käyttäminen R:ssä

For-silmukkaa R:ssä voidaan käyttää iteroimaan DataFramen rivien yli. For-silmukan sisällä voimme käyttää riviindeksiä DataFramen jokaiselle riville pääsyyn. Tarkastellaan seuraavaa R-koodia, joka on esittely for-silmukasta iteroitaessa määritellyn DataFramen rivejä.



data = data.frame(c1 = c(1:5),

c2 = c(6:10),

c3 = c(11:15))

for(i in 1:nrow(data)) {

rivi <- data[i, ]

tulosta (rivi)

}

Tässä määritämme ensin data.frame()-funktion 'datan' sisällä. Data.frame()-funktio sisältää tässä kolme saraketta. Jokainen sarake on asetettu numerosarjalla 1-5, 6-10 ja 11-15. Sen jälkeen otetaan käyttöön for-silmukka-funktio, joka iteroidaan DataFrame 'datan' rivien yli käyttämällä nrow()-funktiota saadakseen rivien kokonaismäärän. Silmukkamuuttuja 'i' ottaa arvot koko 'data' -rivien lukumäärälle.



Poimimme sitten DataFrame-tietokehyksen 'data' i:nnen rivin käyttämällä hakasulkeiden merkintää '[ ]'. Purettu rivi tallennetaan 'rivi'-muuttujaan, jonka print()-funktio tulostaa.





Tästä syystä silmukka toistuu kaikilla DataFrame-riveillä ja näyttää rivinumerot tulosteessa sarakkeen arvojen kanssa.



Esimerkki 2: For-Loop Over DataFrame -sarakkeiden käyttö

Vastaavasti voimme käyttää for-silmukkaa R:ssä silmukan yli määritetyn tietokehyksen sarakkeiden yli. Voimme käyttää edellistä koodia silmukan sarakkeiden yli, mutta meidän on käytettävä ncol()-funktiota for-silmukassa. Sitä vastoin meillä on yksinkertaisin tapa silmukoida DataFramen sarakkeet käyttämällä for-silmukkaa. Harkitse tätä varten seuraavaa R-koodia:

df = data.frame(col1 = c(10, 20, 30, 40, 50),

sarake2 = c(11, 21, 31, 41, 51),

sarake3 = c(12, 22, 32, 42, 52))

for(col in colnames(df)) {

sarake <- df[[sara]]

tulosta (sarake)

}

Tässä luomme ensin df-muuttujan, jossa data.frame() käytetään sarakkeiden lisäyksen kanssa. 'df' DataFrame sisältää kolme saraketta, jotka sisältävät numeerisia arvoja. Seuraavaksi käytämme for-silmukkaa toistamaan 'data' DataFramen sarakkeiden nimiä käyttämällä colnames()-funktiota. Jokaisessa iteraatiossa silmukkamuuttuja 'col' saa nykyisen sarakkeen nimen. Poistettu sarake tallennetaan sitten uuteen muuttujaan, joka on 'sarake'.

Näin ollen 'sarake'-muuttujan tiedot tulostavat tulosteen seuraavalle konsolille:

Esimerkki 3: For-loopin käyttö koko datakehyksen yli

Aikaisemmissa esimerkeissä silmukasimme sarakkeiden ja rivien yli käyttämällä for-silmukkaa, vastaavasti. Nyt käytämme sisäkkäisiä silmukoita iteroidaksemme sekä DataFramen rivejä että sarakkeita samanaikaisesti. R:n koodi annetaan seuraavassa, kun sisäkkäistä for-silmukkaa käytetään sarakkeiden ja rivien päällä:

työntekijät <- data.frame(id=1:4,

names=c('kim', 'John', 'Ian', 'Mark'),

location=c('Australia', 'Amerikka', 'Kanada', 'Jordania'),

palkka=c(2000, 1800, 1500, 1000))

for (rivi 1:nrow(työntekijät)) {

for (col in 1:ncol(työntekijät)) {

print(paste('Rivi indeksi', rivi, 'sarakkeen nimi', sarake, 'solun arvo', työntekijät[rivi, sarake]))

}

}

Tässä ilmoitamme 'työntekijät'-muuttujan, jossa data.frame() kutsutaan asettamaan sarakkeet. Jokaisen sarakkeen arvot määritetään vektoreilla. Sitten käytämme 'työntekijät' DataFramen riville ja sarakkeelle kahta sisäkkäistä for-silmukkaa tietojen toistamiseen. Ulompi silmukka toistuu määritellyn DataFramen rivien yli käyttämällä '1:nrow(employees)'. Jokaisella rivillä '1:ncol(employees)' käytetään sisäisessä silmukassa toistumaan toistuvasti DataFramen sarakkeiden yli.

Sen jälkeen meillä on sisäkkäisten silmukoiden sisällä print()-funktio, joka käyttää paste()-funktiota rivi-, sarakeindeksin ja solun arvon ketjuttamiseksi yhdeksi merkkijonoksi. Työntekijä [rivi, sarake] -lauseke saa tässä arvon nykyisessä solussa, jossa rivi ja sarake ovat olemassa olevat rivi- ja sarakeindeksit.

Siten konsolin tulos noudetaan ketjutetun riviindeksin, sarakeindeksin ja solun arvon kanssa yhdeksi merkkijonoksi.

Esimerkki 4: Vaihtoehtoinen For-Loop-menetelmä kirjassa R

For-silmukka on nyt vanhentunut R-kielellä. Se tarjoaa kuitenkin joitain vaihtoehtoisia menetelmiä, jotka toimivat samalla tavalla kuin for-silmukat ja ovat nopeampia kuin for-silmukat. Menetelmä on peräisin 'apply family' -funktioista, jotka suoritetaan for-loop taustalla iteroidakseen DataFrame-kehysten yli. Tarkastellaan seuraavaa R-koodia, jossa sapply()-funktiota käytetään silmukaan DataFramen yli.

dfX <- data.frame(var1=c(1:5),

var2=c(6:10),

var3=c(11:15),

var4=c(16:20))

dfX

soveltaa(dfX, summa)

Tässä määritetään ensin 'dfX' DataFrame kutsumalla data.frame()-funktio, jossa on kaksi saraketta, joista jokainen sisältää numeerisia arvoja. Tulostamme sitten alkuperäisen 'dfX' DataFramen konsoliin. Seuraavassa vaiheessa käytämme sapply()-funktiota iteroimaan toimitetun DataFramen yli ja saamaan kunkin sarakkeen summan. Funktio sapply() ottaa 'x'- ja 'FUN'-argumentit yleensä. Tässä tapauksessa X on 'dfX' DataFrame ja 'FUN' on summa()-funktio, jota käytetään jokaiseen DataFramen sarakkeeseen.

Iteroinnin tulos, joka saavutetaan sapply()-funktiolla, saavutetaan seuraavassa näytössä. DataFramen summaoperaation tulokset näytetään kullekin sarakkeelle. Lisäksi voimme käyttää myös joitain muita 'apply-perheen' toimintoja for-loop-operaatioon R:ssä:

Johtopäätös

Työskentelemme for-silmukoiden kanssa iteroidaksemme DataFramen rivejä tai sarakkeita tietyn toiminnon suorittamiseksi. For-silmukkaa käytetään yksitellen sarakkeiden ja rivien iterointiin. Lisäksi käytämme tätä iterointiin sekä tietokehyksen sarakkeissa että riveissä samanaikaisesti. Useimmiten funktioiden käyttäminen halutun tuloksen saavuttamiseksi on tehokkaampaa. Esimerkki sovellutusfunktiosta on annettu viimeisessä esimerkissä for-loop-operaation yli.