【问题标题】:R-naming the column output from lapply and replaceR-命名来自 lapply 的列输出并替换
【发布时间】:2020-03-24 20:45:01
【问题描述】:

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

我正在尝试以下方法。我将 10 个年龄列存储在一个对象“hhages_varnames”中。然后,我将 lapply 应用于此对象列表,如果我找到任何“月”文本模式,则将每个对象中的适用 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="_")) 

【问题讨论】:

  • 您的setNames 在名称中添加了一个空格,我建议paste0paste(..., sep='_') 或类似名称。此外,setNames 不会产生副作用,您需要将来自setNames 的返回捕获到某个变量中。
  • 如果您提供hhages_varnames 的样本会更容易提供帮助。也许使用dput 函数。
  • @r2evans 和 Ian Campbell 感谢您的编辑和 cmets。 r2evans 你说得对,我是在意外情况下在粘贴中添加空格 - 很好。我看到你现在看到的关于 setNames 没有副作用的情况。虽然,我不确定如何将它们捕获到一个变量中,因为我正在尝试创建 10 个变量(即,10 个原始变量中的每一个都有一个新变量)。 Ian Campbell 我尝试在帖子中添加说明,即 hhages_varnames 只是一个包含 10 个年龄变量的 var 名称的对象。不过,我也可以尝试自己添加变量的文件/照片。
  • kayla,如果框架完全相似,强烈建议将其保留为data.frames 中的单个list:当您对其中一个进行操作时,请执行相同的操作使用lapply 轻松到所有帧。 Ref:stackoverflow.com/a/24376207 ...从长远来看,这是值得的,如果列表有 3 帧或 300 帧,你不会得到,你的努力是一样的。
  • @r2evans 我很抱歉——我想我在这里误用了变量这个词——我想我应该说我的数据框中的列。我只有一个包含 10 列的数据框。

标签: r replace lapply naming


【解决方案1】:

更新:这是我要做的最终代码。它可以使用 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")))

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多