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