代码之家  ›  专栏  ›  技术社区  ›  M.Qasim

将字符串拆分为向量中给定的多个部分

  •  0
  • M.Qasim  · 技术社区  · 8 年前

    大师,我正在努力寻找一种有效的方法,将字符串拆分为向量中给定的多个部分。

    在下面的示例中,我从BINANCE exchange获得了一些加密货币对。我想把每一对分成 symbol 中的列 top100 数据框。

    library(dplyr)
    library(jsonlite)
    library(RCurl)
    
    top100 <- data.frame(fromJSON(getURL(paste0('https://api.coinmarketcap.com/v1/ticker/?start=0&limit=100'))))
    
    markets <- data.frame(pairs = c("NEOBTC","EOSETH","VENETH","ELFETH","ICXETH","BNBETH","NEOETH",
                                    "TRXETH","QTUMETH","DASHETH","XRPETH" ,"ETHUSDT","LTCUSDT","ADAETH",
                                    "XMRETH","ZECETH","IOTAETH","NEOUSDT","BNBUSDT","XLMBNB","LSKBNB"), 
                          symbol1 = NA,
                          symbol2 = NA)
    
    markets$symbol1 <- substr(markets$pairs, 1,3) markets$symbol2 <- substr(markets$pairs, 4,6)
    
    markets$symbol1 %in% top100$symbol markets$symbol2 %in% top100$symbol
    

    一种天真的方法是将股票代码的前三个字符作为 symbol1 最后三个字符为 symbol2 ,有些股票代码有三个以上的字符,如DASH。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Onyambu    8 年前

    您可以尝试以下代码:

    grep("\\w\\s\\w",sapply(paste0("(",top100$symbol,"$)"),
                        sub,"\\3 \\1",a<-markets$pairs),value = T)%>%
                        {.[match(a,sub("\\s","",.))]}%>%
                        strsplit(.,"\\s")%>%do.call(rbind,.)%>%
                        {setNames(as.data.frame(.),paste0("Symbols",1:2))}
    

    您也可以尝试:

    sub(paste0("(",top100$symbol,")$",collapse = "|"),"",a<-markets$pairs)%>%
    {cbind.data.frame(Symbols1=.,Symbols2=sub(paste0("^(",.,")",collapse = "|"),"",a))}
    

    上述两种代码均给出:

          Symbols1 Symbols2
    1       NEO      BTC
    2       EOS      ETH
    3       VEN      ETH
    4       ELF      ETH
    5       ICX      ETH
    6       BNB      ETH
    7       NEO      ETH
    8       TRX      ETH
    9      QTUM      ETH
    10     DASH      ETH
    11      XRP      ETH
    12      ETH     USDT
    13      LTC     USDT
    14      ADA      ETH
    15      XMR      ETH
    16      ZEC      ETH
    17     IOTA      ETH
    18      NEO     USDT
    19      BNB     USDT
    20      XLM      BNB
    21      LSK      BNB