Я хочу выполнить эту простую категоризацию в кадре данных в R. Категории - 1,2,3,4 и -1. Я хочу добавить результаты этого вычисления в новый столбец в фрейме данных. «oldCol» - это имя столбца, уже находящегося в фрейме данных.Неверные результаты из числового сравнения в R
DF$newCol <- apply(DF, 1, function(row) {
if (row[["oldCol"]] > 10.0)
{result1 <- 4.0}
else if (row[["oldCol"]] > 2.0 && row[["oldCol"]] <= 10.0)
{result1 <- 3.0}
else if (row[["oldCol"]] > 0.5 && row[["oldCol"]] <= 2.0)
{result1 <- 2.0}
else if (row[["oldCol"]] > 0.0 && row[["oldCol"]] <= 0.5)
{result1 <- 1.0}
else
{result1 <- -1.0}
return(result1)
})
Моя проблема: код делает новый столбец, но значения в нем неверны! С помощью этого точного кода цифры более 10 корректно классифицируются как класс 4, но все остальные строки содержат -1. Зачем? Алгоритм настолько прост, что это действительно беспокоит меня.
Кроме того, есть ли более элегантный способ сделать это?
'apply' преобразует ваши строки в векторы, так что если ваш' DF' имеет столбцы символов, все будет преобразовано в символ ... Например: apply (data.frame (x = 1:26, y = letters), 1, function (row) class (row [["x"]])) 'возвращает символ", а не "integer". – flodel
Спасибо, Бен Болкер! Это решило мою проблему: –
keepData <- transform (keepData, SizeClass4 = as.numeric (as.character (cut (LeafArea, breaks = c (-Inf, 0,0.5,2,10, Inf), labels = c (-1,1: 4))))) –