2017-02-21 27 views
0

У меня есть dataframe df. Я хочу применить функцию myfun к каждой ее строке. Но в идеале я хотел бы использовать имена заголовков фрейма данных в функции myfun. Удивление, если это можно сделать без явного переименования столбцов в myfun. Благодаря!Dataframe применять проход строки с заголовком

myfun() <- function(rowdf) { 
    //statements 

    if(rowdf$price > 1000){ 
     val = "high" 
    } elseif(rowdf$num_floors > 3){ 
     val = "high" 
    } else{ 
     val = "low" 
    } 
    return(val) 
} 

//df has columns price and num_floors 
bld_vals = apply(df, 1, myfun) 
+0

Вынуть оператор знака доллара, 'если (rowdf [[ 'цена']]> 1000)' и т.д. ... –

+0

'ifelse' является Векторизованной, почему бы не использовать это? – Sotos

+0

Ваш синтаксис подозрительный btw –

ответ

0

Есть несколько вещей, которые вы должны будете изменить,

  1. Вы можете использовать «$» на dataframe вы передаете этот путь.
  2. Нет необходимости применять то, что вы намерены делать.

Выполните следующий код:

myfun <- function(rowdf,price,num_floors) { 

val <- ifelse (rowdf[,price]>1000,"high",ifelse(rowdf[,num_floors]>3,"high","low")) 

return(val) 

} 


df$val <- myfun(df,"price","num_floors") 
+0

Вы проверили свой код на реальном наборе данных? Если да, пожалуйста, покажите это. Подсказка: 'if' не может обрабатывать условие длины больше 1. –

+0

@DavidArenburg вы можете проверить сейчас? Я отредактировал ответ. Спасибо за подсказку. –

 Смежные вопросы

  • Нет связанных вопросов^_^