【问题标题】:Keeping only one unique column from data import using dplyr使用 dplyr 仅保留一个唯一列从数据导入中
【发布时间】:2016-04-13 02:30:19
【问题描述】:

我有兴趣使用 dplyr 删除满足以下特征的列:

  • 列值相同
  • 列名相同

数据

我正在处理与提取相对应的数据集:

data("mtcars")
dta <- cbind(mtcars, mtcars[,1:4], mtcars[,1:2], mtcars[,4:6])

任务

使用 dplyr 我想通过删除重复列来返回原始 mtcars 数据。 在现实世界中,原始 mtcars 对我不可用,即我无法获得数据中应包含的列名列表。

尝试 1

我想在这些方面做点什么:

require(dplyr); require(magrittr)
dta %<>%
  select(matches(unique(names(dta))))

这自然不行:

错误:is.string(match) 不是 TRUE

此外,代码不包含检查是否存在重复值。

【问题讨论】:

    标签: r select dataframe duplicates dplyr


    【解决方案1】:

    也许我们可以试试

    dta %<>% 
        setNames(.,make.unique(names(.))) %<>%
        select(-matches("\\.\\d+"))
    identical(dta, mtcars)
    #[1] TRUE
    

    【讨论】:

    • 非常感谢您的帮助。这解决了唯一名称的问题。我想知道是否可以合并一种检查值是否相同的方法。我的想法是,如果同名列的值不同,我应该保留两列。
    • @Konrad 对于data.framedata.tabletbl_df 等,重复的列名不是理想的特性。如果是matrix,则不会有问题。否则,对于按名称选择列,它总是会成为一个问题。即使您在原始数据集中有重复的列名,我也会将其转换为唯一名称,这样以后就不会产生问题。
    • 在船上拍摄。原始数据集是外部生成的。这让我想知道,尝试另一种方法并忽略名称问题并删除具有重复值的列是否明智。有没有办法编写select 命令,以便从具有相同值的三列中只保留第一列?
    • @Konrad 我不太确定dplyr 语法中的这一点,但base R 可以使用?duplicated
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多