【问题标题】:Dplyr or Magrittr - tolower?Dplyr 或 Magrittr - 降低?
【发布时间】:2015-03-25 18:47:21
【问题描述】:

是否可以在 dplyr 或 magrittr 链中将所有列名设置为大写或小写?

在下面的示例中,我加载数据,然后使用 magrittr 管道将其链接到我的 dplyr 突变。在第 4 行中,我使用了 tolower 函数,但这是出于不同的目的:创建一个带有小写观察值的新变量。

mydata <- read.csv('myfile.csv') %>%
    mutate(Year = mdy_hms(DATE),
           Reference = (REFNUM),
           Event = tolower(EVENT)

我显然正在寻找类似 @​​987654326@ 的东西,但我知道这不起作用/不存在。

我注意到 dplyr rename 函数,但这并没有真正的帮助。

在 magrittr 中,colname 选项是:

set_colnames 代替基本 R 的 colnames&lt;-
set_names 代替基本 R 的 names&lt;-

我已经用这些尝试了很多排列,但没有骰子。

显然,这在基数 r 中非常简单。

names(mydata) <- tolower(names(mydata))

然而,这似乎与 / 哲学不协调,您必须先将其作为一个笨重的班轮,然后再转向优雅的 dplyr/magrittr 代码链。

【问题讨论】:

标签: dplyr magrittr r dplyr magrittr


【解决方案1】:

dplyr 现在允许这样做:

mydata %>% rename_all(tolower)

【讨论】:

  • 好像受限于列数:
  • 我看不出有 10k 列,你有多少列?
  • 在我的例子中是 5505 col 和 19425 rows 但我忘了它是通过 sparklyr 访问的 spark rdd ....
【解决方案2】:
iris %>% setNames(tolower(names(.))) %>% head

或者等效地使用非替换形式的替换函数:

iris %>% `names<-`(tolower(names(.))) %>% head
iris %>% `colnames<-`(tolower(names(.))) %>% head  # if you really want to use `colnames<-`

【讨论】:

    【解决方案3】:

    如果我正确理解您的问题,使用magrittr 的“复合分配管道运算符”%&lt;&gt;% 可能是一个更简洁的选择。

    library("magrittr")
    names(iris) %<>% tolower
    
    ?`%<>%` # for more
    

    【讨论】:

      【解决方案4】:
      mtcars %>% 
      set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
      head
      

      casefold 在基数 R 中可用,并且可以双向转换,即可以根据需要使用标志 upper 转换为全部大写或全部小写。

      另外colnames() 将仅使用列标题进行大小写转换。

      【讨论】:

      • casefold 是为与 S-PLUS 兼容而提供的 tolower 和 toupper 的包装器。
      【解决方案5】:

      你也可以定义一个函数:

      upcase <- function(df) {
        names(df) <- toupper(names(df))
        df
      }
      
      library(dplyr)
      
      mtcars %>% upcase %>% select(MPG)
      

      【讨论】:

      • 恕我直言,这是最好的解决方案。我将此函数命名为names_to_upper(第二个为names_to_lower),colnames_ 看起来也不错:mtcars %&gt;% colnames_to_upper %&gt;% select(MPG)
      猜你喜欢
      • 2014-11-06
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多