【问题标题】:split string into multiple parts given in a vector将字符串拆分为向量中给定的多个部分
【发布时间】:2018-01-15 02:03:13
【问题描述】:

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

在下面的例子中,我有几个来自 BINANCE 交易所的加密货币对。我想将每一对拆分为top100 数据框中的symbol 列中给出的两个单独的部分。

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。

【问题讨论】:

  • JSON 响应对我来说似乎并不意味着配对。它看起来就像一个加密货币列表。
  • 请试试这个:top100 api.coinmarketcap.com/v1/ticker/?start=0&limit=100'))))
  • 此 JSON 查询从 coinmarketcap.com 获取前 100 种加密货币的列表
  • ...什么定义了一对?
  • 对下载的是最近交易的历史数据。 BINANCE 上的所有可交易对都列在binance.com

标签: r dplyr


【解决方案1】:

你可以试试下面的代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2020-11-08
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多