For-Loop в R DataFrame

For Loop V R Dataframe



For-цикълът е контролна структура, която ни позволява да повтаряме набор от инструкции в определен брой пъти. Това е често използван метод за итерация в R, особено когато трябва да извършим същата операция върху някои елементи или да итерираме върху структура от данни като тази в DataFrame. Редовете и колоните съставляват DataFrames в R, където всеки ред представлява едно наблюдение, а всяка колона обозначава променлива или аспект на това наблюдение.

В тази конкретна статия ние използваме for-цикъл за итерация на DataFrame в различни подходи. Имайте предвид, че итерацията на for-цикъл в редове и колони може да бъде много изчислителна за големи DataFrames.







Пример 1: Използване на For-Loop върху редове на DataFrame в R

Цикълът for в R може да се използва за итериране на редовете на DataFrame. В рамките на for-цикъла можем да използваме индекса на реда за достъп до всеки ред на DataFrame. Нека разгледаме следния R код, който е демонстрация на for-цикъл за итериране на редовете на определената DataFrame.



данни = data.frame(c1 = c(1:5),

c2 = c(6:10),

c3 = c(11:15))

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

ред <- данни[i, ]

печат (ред)

}

Тук първо дефинираме функцията data.frame() вътре в „данни“. Функцията data.frame() тук съдържа три колони. Всяка колона е зададена с поредица от числа съответно от 1 до 5, 6 до 10 и от 11 до 15. След това се внедрява функцията for-loop, която итерира редовете на „данните“ на DataFrame, използвайки функцията nrow(), за да получи общия брой редове. Променливата на цикъла „i“ приема стойностите на целия брой редове в „данни“.



След това извличаме i-тия ред от „данните“ на DataFrame, като използваме обозначението в квадратни скоби „[ ]“. Извлеченият ред се съхранява в променлива „ред“, която ще бъде отпечатана от функцията print().





Следователно, цикълът итерира всички редове в DataFrame и показва номерата на редовете в изхода заедно със стойностите на колоната.



Пример 2: Използване на For-Loop върху колони на DataFrame

По подобен начин можем да използваме for-цикъла в R, за да преминем през колоните на определената рамка с данни. Можем да използваме предишния код, за да преминем през колоните, но трябва да използваме функцията ncol() във for-цикъла. Обратно, имаме най-простия подход за преминаване през колоните на DataFrame с помощта на for-loop. Помислете за следния R код за това:

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

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

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

for(col in columnnames(df)) {

колона <- df[[col]]

печат (колона)

}

Тук първо създаваме променливата df, където data.frame() се използва с вмъкването на колони. “df” DataFrame съдържа три колони, които съдържат числови стойности. След това използваме for-цикъл, за да итерираме имената на колоните на DataFrame „данни“, като използваме функцията colnames(). Във всяка итерация променливата на цикъла „col“ приема името на текущата колона. След това извлечената колона се съхранява в нова променлива, която е „колона“.

По този начин данните от променливата „колона“ отпечатват изхода на следната конзола:

Пример 3: Използване на For-Loop над целия DataFrame

В предишните примери ние преминахме през колоните и редовете, използвайки съответно for-цикъла. Сега използваме вложените for цикли, за да обикаляме едновременно редовете и колоните на DataFrame. Кодът на R е предоставен в следното, където вложеният for-цикъл се използва над колоните и редовете:

служители <- data.frame(id=1:4,

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

местоположение=c('Австралия', 'Америка', 'Канада', 'Йордания'),

заплата=c(2000, 1800, 1500, 1000))

за (ред в 1:nrow(служители)) {

за (кола в 1:ncol(служители)) {

print(paste('Индекс на ред', ред, 'име на колона', col, 'стойност на клетка', служители [ред, col]))

}

}

Тук декларираме променливата „employees“, където data.frame() се извиква за задаване на колоните. Стойностите във всяка колона са посочени с помощта на вектори. След това, за реда и колоната на DataFrame „служители“, ние използваме два вложени for-цикла, за да итерираме данните. Външният цикъл итерира редовете на определената DataFrame, използвайки „1:nrow(employees)“. За всеки ред „1:ncol(employees)“ се използва във вътрешния цикъл за многократно повторение на колоните на DataFrame.

След това имаме функция print() вътре във вложените цикли, която разгръща функцията paste(), за да свърже индекса на реда, индекса на колоната и стойността на клетката в един низ. Изразът [ред, колона] на служител тук получава стойността в текущата клетка, където ред и колона са съответно съществуващите индекси на ред и колона.

По този начин изходът на конзолата се извлича с конкатенирания индекс на ред, индекс на колона и стойност на клетка в един низ.

Пример 4: Алтернативен метод For-Loop в R

Цикълът for вече е остарял в езика R. Той обаче предоставя някои алтернативни методи, които работят по същия начин като for-цикъла и са по-бързи от for-циклите. Методът е от функциите на „семейството на прилагане“, които изпълняват for-цикъл във фонов режим, за да итерират DataFrames. Нека разгледаме следния R код, където функцията sapply() се използва за преминаване през DataFrame.

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

var2=c(6:10),

var3=c(11:15),

var4=c(16:20))

dfX

приложение (dfX, сума)

Тук първо установяваме „dfX“ DataFrame, като извикваме функцията data.frame() с две колони, всяка от които съдържа числови стойности. След това отпечатваме оригиналния “dfX” DataFrame на конзолата. В следващата стъпка използваме функцията sapply(), за да преминем през предоставената DataFrame и да получим сумата от всяка колона. Функцията sapply() приема аргументите „x“ и „FUN“ като цяло. В този случай X е „dfX“ DataFrame, а „FUN“ е функцията sum(), която се прилага към всяка от колоните на DataFrame.

Резултатът от итерацията, която се постига чрез функцията sapply(), се постига на следващия екран. Резултатите от операцията за сумиране на DataFrame се показват за всяка колона. Освен това можем да използваме и някои други функции от „семейството на прилагане“ за операцията за цикъл в R:

Заключение

Ние работим с for-цикли, за да итерираме редовете или колоните на DataFrame, за да изпълним конкретна операция. Цикълът for се използва индивидуално за итериране на колоните и редовете. Освен това, ние използваме това за итерация върху двете колони и редове на рамката с данни едновременно. През повечето време прилагането на функции за постигане на желания резултат е по-ефективно. Примерът на функцията apply е даден в последния пример над операцията for-цикъл.