【问题标题】:How to find unique name/character from a list of names in R如何从 R 中的名称列表中查找唯一名称/字符
【发布时间】:2016-04-07 09:46:17
【问题描述】:

我有一个庞大的公司名称列表。如下图所示,如果名称 company 是 ABBEYCREST.DEAD...10.10.14...ASK.PRICE,这意味着 ABBEYCREST.DEAD...10.10.14... 是公司名称,ASK.PRICE 是 ASK 价格数据当它以 BID.PRICE 结尾时,表示它的 BID PRICE 数据。我想确定数据框中只有一个列名可用的公司。实际上,我有一个具有列标题的数据框,如下图所示,这意味着每个公司应该有 2 列,如果有 4000 家公司,那么我的数据框中应该有 8000 列,但我有 7999(虽然我的数据框有一个日期列,但我排除了当我计算列时它)。

df<-AskBid

    ABBEYCREST.DEAD...10.10.14...ASK.PRICE
    ABBEYCREST.DEAD...10.10.14...BID.PRICE
    ABBOT.GROUP.DEAD...07.03.08...ASK.PRICE
    ABBOT.GROUP.DEAD...07.03.08...BID.PRICE
    ABERDEEN.ASSET.MAN..FULLY.PAID.23.09.05...ASK.PRICE
    ABERDEEN.ASSET.MAN..FULLY.PAID.23.09.05...BID.PRICE
    ABERDEEN.ASSET.MAN..NIL.PAID.23.09.05...ASK.PRICE
    ABERDEEN.ASSET.MAN..NIL.PAID.23.09.05...BID.PRICE
    ABERDEEN.FTBL.CLUB.DEAD...DEAD.04.08.03...ASK.PRICE
    ABERDEEN.FTBL.CLUB.DEAD...DEAD.04.08.03...BID.PRICE
    ABERTIS..IRS....BID.PRICE
    ABGENIX..IRS..DEAD...12.11.07...ASK.PRICE
    ABGENIX..IRS..DEAD...12.11.07...BID.PRICE
    ABLON.GROUP.DEAD...31.05.13...ASK.PRICE
    ABLON.GROUP.DEAD...31.05.13...BID.PRICE
    ACAMBIS.DEAD...25.09.08...ASK.PRICE
    ACAMBIS.DEAD...25.09.08...BID.PRICE

我要找的是

missing <- df
ABERTIS..IRS....BID.PRICE

非常感谢您的帮助。这导致我的估计出现问题。

【问题讨论】:

    标签: r dataframe duplicates multiple-columns


    【解决方案1】:

    您可以删除ASK.PRICEBID.PRICE 部分并调用duplicated 两次(第二次按相反的顺序):

    cn <- readLines(textConnection(
    "ABBEYCREST.DEAD...10.10.14...ASK.PRICE
    ABBEYCREST.DEAD...10.10.14...BID.PRICE
    ABBOT.GROUP.DEAD...07.03.08...ASK.PRICE
    ABBOT.GROUP.DEAD...07.03.08...BID.PRICE
    ABERDEEN.ASSET.MAN..FULLY.PAID.23.09.05...ASK.PRICE
    ABERDEEN.ASSET.MAN..FULLY.PAID.23.09.05...BID.PRICE
    ABERDEEN.ASSET.MAN..NIL.PAID.23.09.05...ASK.PRICE
    ABERDEEN.ASSET.MAN..NIL.PAID.23.09.05...BID.PRICE
    ABERDEEN.FTBL.CLUB.DEAD...DEAD.04.08.03...ASK.PRICE
    ABERDEEN.FTBL.CLUB.DEAD...DEAD.04.08.03...BID.PRICE
    ABERTIS..IRS....BID.PRICE
    ABGENIX..IRS..DEAD...12.11.07...ASK.PRICE
    ABGENIX..IRS..DEAD...12.11.07...BID.PRICE
    ABLON.GROUP.DEAD...31.05.13...ASK.PRICE
    ABLON.GROUP.DEAD...31.05.13...BID.PRICE
    ACAMBIS.DEAD...25.09.08...ASK.PRICE
    ACAMBIS.DEAD...25.09.08...BID.PRICE"))
    
    ## remove (ASK|BID).PRICE
    cn.sub <- gsub("(ASK|BID)\\.PRICE$", "", cn)
    
    cn[!(duplicated(cn.sub) | rev(duplicated(rev(cn.sub))))]
    # [1] "ABERTIS..IRS....BID.PRICE"
    

    【讨论】:

    • 是否可以知道被移除的唯一公司名称。
    • 对不起,我不太明白你的问题。上面代码的输出是唯一的列名(正如您在原始问题中所要求的那样)。如果"ABERTIS..IRS....BID.PRICE" 是唯一唯一的,您就知道"ABERTIS..IRS....ASK.PRICE" 丢失了。
    • 我可以运行这段代码来找出两个不同数据框中不常见(唯一)的列标题(公司名称)吗?但在这些数据框中,公司名称以 .S 结尾,而在其他数据框中,相同的公司名称以 .TURNOVER.BY.VOLUME 结尾。
    • 这是一个类似的问题:cn &lt;- c(colnames(df1), colnames(df2)); cn.sub &lt;- gsub ("(\\.S|\\.TURNOVER.BY.VOLUME)$", "", cn); cn[!(duplicated(cn.sub) | rev(duplicated(rev(cn.sub))))].
    • 我确实意识到这有点牵强。然后从两个数据框中删除那些唯一的 /uncommon 。
    【解决方案2】:

    这是另一种解决方案,假设文本是读入的数据框中的列名:

    library(dplyr)
    df$text <- gsub(("(ASK|BID)", "", df$text)
    df %>% group_by(text) %>% filter(n() != 2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2014-02-13
      • 2016-06-30
      相关资源
      最近更新 更多