мне нужно классифицировать строки на две группы (Present
или Not present
) на основе значений в двух столбцах Var1
, Var2
в dataframe pum
. Позже добавьте это как новый столбец в другой фрейм данных как data.cov.cat$PU
. Когда Var1
более 0.053
или Var2
в наборе значений c(1,2,3)
, строки должны быть обозначены как Present
еще Not present
.Преодолеть принуждение dataframe к списку при использовании sqldf
Нижеприведенный фрагмент кода разработан на условиях.
data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'
WHEN Var1 < 0.053 OR Var2 IN (1,2,3) THEN 'Present'
WHEN Var1 < 0.053 OR Var2 = 0 THEN 'Not present'
ELSE 'NA'
END as newCol
FROM pum")$newCol
Команда выполняет правильно и вывод, как ожидается, за исключением dataframe data.cov.cat
принуждается к списку.
Не могли бы вы предложить, как избежать обратного преобразования данных в список.
Возпроизводимо пример:
data.cov.cat <- data.frame(V1 = runif(10,0,10), V12 = c("blue", "red", "yellow", "pink","blue", "red", "yellow", "pink", "red", "yellow"))
data.cov.cat <- sapply(data.cov.cat, as.factor)
pum <- data.frame(Var1 = runif(10,0,1), Var2 = c(1,3,2,0,2,1,2,0,1,3))
data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'
WHEN Var1 < 0.053 OR Var2 IN (1,2,3) THEN 'Present'
WHEN Var1 < 0.053 OR Var2 = 0 THEN 'Not present'
ELSE 'NA'
END as newCol
FROM pum")$newCol
Как оригинальный data.frame имеет столбцы разложено, я преобразуя их здесь.
Какой «data.frame» преобразован в «список» - «pum» или «data.cov.cat»? Не могли бы вы предоставить образец данных, который воспроизводит проблему? –
@alexis_laz Я добавил пример, не могли бы вы взглянуть на него. – Prradep
Даже с редактированием он все еще не воспроизводится, так как отсутствует data.cov.cat. Также, если вы собираетесь использовать случайные числа, необходимо сделать заявление 'set.seed', чтобы сделать его воспроизводимым. Выход из 'sqldf (...) $ newCol' является символьным вектором, как ожидалось, но мы не можем больше говорить на основе предоставленной информации. –