Я хотел бы применить функцию к каждой строке фрейма данных, как показано ниже. Я знаю, как использовать apply в случае, когда фрейм данных содержит только числа, но что, если строки содержат, скажем, булевы/логические значения, строки и целые числа? Пример:
df <- data.frame(x=1:10,
y=c(TRUE, FALSE),
z=letters[1:10],
stringsAsFactors=FALSE)
RowFunction <- function(row) {
if (row$y) return(row$x)
return (row$z)
}
sapply(1:dim(df)[1], function(i) { RowFunction(df[i, ]) })
Есть лучший способ сделать это? Моя первая мысль состояла в том, чтобы использовать apply(df, 1, RowFunction)
после добавления row <- as.list(row)
в начало RowFunction, но это не работает, потому что apply приводит df к массиву, который не может обрабатывать строки, содержащие разные типы данных.
Просто для моего знания R я хотел бы знать, есть ли более чистый способ сделать это, чем sapply(1:dim(df)[1], ... )
. Любые идеи?
Заранее спасибо!
ifelse
иwith
...2 моих любимых! 09.11.2011