R-命名 lapply 的列输出并替换

R-naming the column output from lapply and replace

我的数据框中有 10 个年龄列,名称相似(即 agehhm1、agehhm2、...、agehhm10),它们应该保存一个人的年龄(以年为单位)。目前,它们都是字符串,因为一些观察结果包括单词 "month"、"mos" 等,因为有些人还不到 1 岁。我正在尝试使用 lapply 遍历这些列,并将包含这些字符串模式的观察结果替换为“0”值。我很接近,但我对如何命名我想分配 lapply 输出的新列感到困惑。我正在尝试设置名称。我没有收到错误,但我的数据框中没有任何变化。

我正在尝试以下操作。我将 10 个年龄列存储在对象 "hhages_varnames" 中。然后我将 lapply 应用于这个对象列表,如果我找到任何 "month" 文本模式,则将每个对象中适用的 obs 替换为 0。我正在尝试创建名为 agehhm1_clean 的新列作为输出。

我愿意接受您认为更适合其中任何部分的任何其他方法。

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="_")) 

更新:这是我完成我想要做的事情的最终代码。它使用 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")))