【问题标题】:Leverage variable values/types to rename columns利用变量值/类型重命名列
【发布时间】:2018-01-10 13:11:31
【问题描述】:

我已经在 stackoverflow 上搜索了这个问题的答案,但到目前为止还没有运气。我的要求:

对于一个简单的数据框:

# create dummy data.frame
d <- data.frame(var1 = as.character(1:5), 
                var2 = factor(letters[1:5]), 
                var3 = 1:5, stringsAsFactors = FALSE,
                var4 = rep("<div class='The mink cat'< /p>'",5))

如何在不引用原始列名(例如 d[,1] 或 var1)的情况下根据变量类型/字符串内容重命名变量?

将 var1-var3 重命名为每个变量中的值类型给出的字符、因子和数字。

通过搜索变量值并利用字符串的一部分:'the mink cat',将 var4 重命名为 'mink'。

【问题讨论】:

  • 你是说nm1 &lt;- sapply(d, class); names(d)[1:3] &lt;- nm1[1:3]

标签: r dplyr data-management


【解决方案1】:

使用 purrr 库获得更简化的代码

library(purrr)
colnames(d) <- map_chr(d, class)

d

  character factor integer                       character
1         1      a       1 <div class='The mink cat'< /p>'
2         2      b       2 <div class='The mink cat'< /p>'
3         3      c       3 <div class='The mink cat'< /p>'
4         4      d       4 <div class='The mink cat'< /p>'
5         5      e       5 <div class='The mink cat'< /p>'

【讨论】:

    【解决方案2】:

    正如我们之前评论的那样,解决方案是在 sapply 的列中找到 class,然后使用该对象 ('nm1') 命名列,最后在第一行 unlist 获取具有“mink”的列的索引并将列名分配给“mink”

    nm1 <- sapply(d, class)
    names(d) <- nm1
    names(d)[grep("mink", unlist(d[1,]))] <- "mink"
    d
    #  character factor integer                            mink
    #1         1      a       1 <div class='The mink cat'< /p>'
    #2         2      b       2 <div class='The mink cat'< /p>'
    #3         3      c       3 <div class='The mink cat'< /p>'
    #4         4      d       4 <div class='The mink cat'< /p>'
    #5         5      e       5 <div class='The mink cat'< /p>'
    

    【讨论】:

      【解决方案3】:

      可能是这样的:

      colnames(d) = lapply(d,class)
      colnames(d)[sapply(d, function(x) any(grepl("cat",x)))] = "mink"
      

      输出:

        character factor integer                            mink
      1         1      a       1 <div class='The mink cat'< /p>'
      2         2      b       2 <div class='The mink cat'< /p>'
      3         3      c       3 <div class='The mink cat'< /p>'
      4         4      d       4 <div class='The mink cat'< /p>'
      5         5      e       5 <div class='The mink cat'< /p>'
      

      最后一列重命名为“mink”,因为它包含“mink”。

      【讨论】:

        猜你喜欢
        • 2017-10-23
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 2020-01-30
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多