【发布时间】:2020-01-27 15:56:16
【问题描述】:
假设我的数据有两个相同的列,称为 SYC SJ Equity。当我使用基础read.csv() 将其导入R 并将check.names 设置为FALSE 时,数据将使用具有相同名称的两列导入。然后我可以像这样删除重复的列:
df <- df %>%
do(.[!duplicated(names(.))])
如果我使用读取器中的read_csv() 函数导入数据,重复的列会以“SYC SJ Equity_1”的形式获取列名。然后我可以执行以下操作来删除重复的列
df <- df %>%
select(-contains("_"))
但是,如果数据在.xlsx 格式的工作表中,并且我使用readxl 包中的read_excel() 函数,则重复的列将导入为:
New names:
* `SYC SJ Equity` -> `SYC SJ Equity...406`
* `SYC SJ Equity` -> `SYC SJ Equity...407`
在这种情况下,两个列都被重命名,而使用read_csv(),只有额外的实例被重命名。在这种情况下,我必须匹配整个字符串才能删除重复的列。我不知道将哪些数字分配给重复的列。我假设它基于列索引?此外,即使使用read_csv() 导入,如果我的列在原始数据中的名称中自然都有下划线,我的解决方案也将不起作用。所以我的问题是,如何删除 tidyverse 中存储在 tibbles 中的数据的重复列?使用基础 R 和 duplicated() 很容易做到这一点。但这不适用于 tidyverse 的 tibbles。我知道dplyr 动词是按列名而不是按列索引选择的,所以列名总是必须不同。但是有没有办法总是用 tidyverse 删除重复的列,而不用查看控制台来查看新的重复名称?
【问题讨论】: