【问题标题】:dplyr: how to modify column names based on a pattern? [duplicate]dplyr:如何根据模式修改列名? [复制]
【发布时间】:2017-04-29 00:45:50
【问题描述】:

考虑这个简单的例子:

data <- data_frame('data::col1' = c(1,2,3), 'data::col2' = c(1,2,3))
> data
# A tibble: 3 × 2
  `data::col1` `data::col2`
         <dbl>        <dbl>
1            1            1
2            2            2
3            3            3

这种数据帧是使用 Apache Pig 得到的输出。在这里,我可以使用dplyr 加载它,但正如您所见,列的名称很麻烦。

如何使用tidyverse 套件去除:: 之前的部分?另外,假设我有很多列的模式为data::mycol,所以理想的解决方案不需要手动输入每个受影响的列。

预期输出:

# A tibble: 3 × 2
   col1  col2
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3

谢谢!

【问题讨论】:

  • 无需重新发明轮子,这里:colnames(data) &lt;- gsub("^data::","",colnames(data))
  • @Noobie 可能,我猜。但我不能说我个人有兴趣将这个问题硬塞到一组特定的包中。
  • @Noobie 你确实意识到你在加载 tidyverse 时使用了“10 个不同的包”?它只是一个元包...
  • " 我不得不使用 10 个不同的包在我的数据帧上做一些事情,这让我发疯了" -- tidyverse 实际上是几个包的集合。 Joran 的解决方案使用零包。有什么问题?
  • @Noobie 好吧,学习 R 的一部分是知道什么时候使用包,如果可以使用更简单的解决方案。学习解决问题的不同方法很好,但这不是您应该放弃基本 R 方法的情况之一。也许你将来会遇到一个必要或者更容易使用tidyverse的案例。

标签: r dplyr tidyr


【解决方案1】:
library(dplyr)
library(purrr)

data <- data.frame('data::col1' = c(1,2,3), 'data::col2' = c(1,2,3))
names(data) <- names(data) %>%
  gsub("data..", "", .) 

【讨论】:

  • 抱歉,刚刚看到您对 tidyverse 解决方案的请求。
  • 如果您添加了tidyverse 解决方案。请同时保留purr 一个。它很好
  • 这与 cmets 中的 @joran 不一样,但它使用 %&gt;% 而不是嵌套函数? purrr 发来什么?
  • 这实际上并没有使用来自purrr 的任何东西,是吗?只需要来自dplyr(或magrittr)的管道
  • data %&gt;% setNames(names(data) %&gt;% stringr::str_replace("data..","")) -&gt; data 会不会更整洁?
猜你喜欢
  • 2023-02-14
  • 1970-01-01
  • 2020-09-29
  • 2019-06-14
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多