如何从R中的名称列表中查找唯一的名称/字符

时间:2016-01-03 18:25:00

标签: r dataframe duplicates multiple-columns

我有很多公司名称。如下图所示,如果名称公司是ABBEYCREST.DEAD ... 10.10.14 ... ASK.PRICE,这意味着ABBEYCREST.DEAD ... 10.10.14 ...是公司名称,ASK.PRICE是ASK价格数据当它以BID.PRICE结束时,意味着它的BID PRICE数据。我想确定在数据框中只有一个列名可用的公司。实际上我有一个数据框,其中有colum标题,如下图所示,暗示每个公司应该有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

我真的很感谢你的帮助。这导致我的估计出现问题。

2 个答案:

答案 0 :(得分:2)

您可以删除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"

答案 1 :(得分:0)

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

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