У меня есть dataframeR IfElse() вычисляет условие и возвращает соответствие
countryname <- c("Viet Nam", "Viet Nam", "Viet Nam", "Viet Nam", "Viet Nam")
year <- c(1974, 1975, 1976, 1977,1978)
df <- data.frame(countryname, year)
, который находится в длинной стране форматом года.
Я хотел бы создать функцию, которая может стандартизировать названия стран, условно относящиеся к году наблюдения. Я создал функцию, которая может вытащить из фрейма данных cnames
и стандартизировать имена, но это полезно только для поперечных сечений и если названия стран не меняются со временем.
country <- c("Vietnam, North", "Vietnam, N.", "Vietnam North", "Viet Nam", "Democratic Republic Of Vietnam")
standardize <- c("Vietnam, Democratic Republic of", "Vietnam, Democratic Republic of", "Vietnam, Democratic Republic of", "Vietnam, Democratic Republic of", "Vietnam, Democratic Republic of")
panel <- c("Vietnam", "Vietnam","Vietnam","Vietnam","Vietnam")
time <- c(1976,1976,1976,1976,1976)
cnames <- data.frame(country, standardize, panel, time)
Функция для стандартизации является
country_name <- function(x) {
return(cnames[match(x,cnames$country),]$standardize)
}
Однако, как вы можете видеть это не учитывает любое изменение названий стран с течением времени. Я пробовал несколько разных вещей, и ближе всего я пришел к этой функции.
country_panel <- function(x, y) {
ifelse(cnames$time < y,
return(cnames[match(x, cnames$country),]$panel),
return(cnames[match(x, cnames$country),]$standardize)
)
}
Я использую dplyr
цепь, чтобы тянуть в кадре данных, а затем использовать mutate
создать новую переменную, которая в идеале, который фиксирует разницу в именах для стран.
d1 <- df %>%
mutate(new_name = country_panel(countryname, year))
Проблема, которую я нахожу в том, что функция оценивает только y
в функции country_panel
как единый объект, а не в качестве вектора. Если я ввешу целое число, которое больше или меньше cnames$time
, оно правильно оценивает, но передает значение для каждой строки.
Как я могу иметь эту функцию оценивать каждый cnames$country
и cnames$time
отношения к df$year
и вернуть правильный cnames$panel
или cnames$standardize
?
Благодарим за помощь.
Ваша функция 'country_panel' вызывает' panel() ', но код этой функции здесь не включен. –
Спасибо, что должно было быть return() –
Выньте 'return', это прекратит вашу функцию от продолжения. (См. Ответ) –