R-наименование столбца вывода из lapply и заменить - PullRequest
0 голосов
/ 24 марта 2020

У меня есть десять столбцов возраста в моем фрейме данных, названных одинаково (то есть agehhm1, agehhm2,…, agehhm10), которые должны содержать возраст в годах для человека. В настоящее время все они являются строками, поскольку некоторые наблюдения включают слова «месяц», «мос» и т. Д. c. так как некоторые люди моложе 1 года. Я пытаюсь использовать lapply для l oop через эти столбцы и заменить наблюдения, которые включают эти строковые шаблоны, значением «0». Я близок, но зацикливаюсь на том, как назвать новые столбцы, которым я хочу назначить вывод lapply. Я пытаюсь установить имена. Я не получаю сообщение об ошибке, но в моем фрейме данных ничего не меняется.

Я пытаюсь сделать следующее. Я храню 10 столбцов возраста в объекте "hhages_varnames". Затем я применяю lapply к этому списку объектов и заменяю соответствующие obs в каждом из них на 0, если найду любой из текстовых шаблонов "month". Я пытаюсь создать новые столбцы с именем agehhm1_clean, et c в качестве выходных данных.

Я открыт для любых других методов, которые, по вашему мнению, подходят для любой части этого.

hhages_varnames просто объект, где я храню имена 10 возрастных столбцов. Так что это просто вектор 1:10 с "agehhm1", "agehhm2", ... "agehhm10".

hhages_varnames <- ls(dataframe_name, pattern = "agehhm.*")
setNames(lapply(hhages_varnames, FUN = function(x) (replace(x, grepl("month|MO|mos|days|months", dataframe_name[,x]),"0"))), 
         paste(names(hhages_varnames),"clean", sep="_")) 

1 Ответ

0 голосов
/ 25 марта 2020

ОБНОВЛЕНИЕ: Вот окончательный код, который я должен сделать, что хотел. Он работал с использованием as.data.frame, чтобы превратить векторы в кадр данных. Я также использовал cbind для добавления новых столбцов в мой существующий фрейм данных. Спасибо!

hhages_varnames <- ls(dataframe_name, pattern = "agehhm.*")
dataframe_name <- cbind(dataframe_name, setNames(as.data.frame(lapply(hhages_varnames, FUN = function(x) (replace(dataframe_name[,x], grepl("month|MO|mo|days|months", dataframe_name[,x]),"0")))), 
       paste0(as.list(hhages_varnames),"clean")))
...