Супер короткая версия: я пытаюсь использовать пользовательскую функцию для заполнения нового столбца в кадре данных командой:
TestDF$ELN<-EmployeeLocationNumber(TestDF$Location)
Однако, когда я запускаю команду, кажется, что она просто применяет EmployeeLocationNumber к значению Location первой строки, а не использует значение каждой строки для определения значения нового столбца для этой строки индивидуально.
Обратите внимание: я пытаюсь понять R, а не просто выполнить эту конкретную задачу. Я действительно смог получить вывод, который искал, используя функцию Apply (), но это не имеет значения. Насколько я понимаю, приведенная выше строка должна работать построчно, но это не так.
Вот особенности для тестирования:
TestDF<-data.frame(Employee=c(1,1,1,1,2,2,3,3,3),
Month=c(1,5,6,11,4,10,1,5,10),
Location=c(1,5,6,7,10,3,4,2,8))
Этот testDF отслеживает, где каждый из 3 сотрудников находился в течение года в нескольких местах.
(Вы можете думать о «Месторасположении» как о уникальном для каждого сотрудника ... в сущности, это уникальный идентификатор для этой строки.)
Функция EmployeeLocationNumber берет местоположение и выводит число, указывающее порядок посещения сотрудником этого места. Например, EmployeeLocationNumber(8) = 2
, потому что это было второе местоположение, которое посетил сотрудник, посетивший его.
EmployeeLocationNumber <- function(Site){
CurrentEmployee <- subset(TestDF,Location==Site,select=Employee, drop = TRUE)[[1]]
LocationDate<- subset(TestDF,Location==Site,select=Month, drop = TRUE)[[1]]
LocationNumber <- length(subset(TestDF,Employee==CurrentEmployee & Month<=LocationDate,select=Month)[[1]])
return(LocationNumber)
}
Я понимаю, что, вероятно, мог бы собрать все это в одну команду подмножества, но я не знал, как сработали ссылки, когда вы использовали команды подмножеств внутри других команд подмножества.
Итак, учитывая, что я действительно пытаюсь понять, как работать в R, у меня есть несколько вопросов:
Почему TestDF$ELN<-EmployeeLocationNumber(TestDF$Location)
не работает построчно, как другие операторы присваивания?
Есть ли более простой способ ссылаться на определенное значение в кадре данных на основе значения другого? Возможно, тот, который не возвращает фрейм данных / список, который затем должен быть сведен и извлечен из?
Я уверен, что функция, которую я использую, смехотворно не похожа на R ... что я должен был сделать, чтобы по существу эмулировать запрос типа INNER Join?