У меня есть дата-карта с миллионами строк и трех столбцов с надписью «Ключевые слова», «Впечатления», «Клики». Я хотел бы добавить столбец со значениями в зависимости от оценки этой функции:Добавление столбца на основе других значений
isType <- function(Impressions, Clicks)
{
if (Impressions >= 1 & Clicks >= 1){return("HasClicks")} else if (Impressions >=1 & Clicks == 0){return("NoClicks")} else {return("ZeroImp")}
}
пока все хорошо. Затем я пытаюсь создать столбец, но 1) он берет навсегда и 2) он отмечает, что все строки имеют «HasClicks», даже те, где он не должен.
# Creates a dataframe
Type <- data.frame()
# Loops until last row and store it in data.frame
for (i in c(1:dim(Mydf)[1])) {Type <- rbind(Type,isType(Mydf$Impressions[i], Mydf$Clicks[i]))}
# Add the column to Mydf
Mydf <- transform(Mydf, Type = Type)
входных данных:
Ключевые слова, показы, клики
"Привет", 0,0
"Мир", 1,0
"R", 34,23
Требуемый объем производства:
Ключевые слова, впечатления, клики, тип
"Hello", 0,0, "ZeroImp"
"Мир", 1,0, "NoClicks"
"R", 34,23, "HasClicks"
Спасибо! Я пришел к такому же выводу, что нужно было использовать ifelse. Я слишком новичок в R, чтобы понять, почему, но спасибо! – datayoda
@ datayoda: 'if()' допускает только одно условие. То есть он допускает или использует только один TRUE или FALSE. В вашем коде вы получили много значений TRUE/FALSE, и только первый из них будет использоваться. В предложении 'if()' вы также не должны использовать '&', поскольку это векторизован и выполняется сравнение для каждого элемента связанных векторов. '&&' предназначен для сравнения одиночных значений. Сравните: 'runif (10)> 0.5 & runif (10)> 0,3' с' runif (10)> 0,5 && runif (10)> 0,3'. Если одна или несколько из первой версии FALSE, вторая ('&&') версия вернет общий FALSE. 'ifelse' является векторизованным' if'. –