【问题标题】:Replacing multiple elements from a vector from an index从索引中替换向量中的多个元素
【发布时间】:2019-01-29 15:56:25
【问题描述】:

我有一个名为 Main 的数据框,其中包含经纪人名称及其编号:

 Main <- data.frame(
   Number = c(3,70,40,8), 
   Broker = c("XP","HSBC","MORGAN STANLEY","UBS"))

然后,这些经纪人进行的交易有一个向量:

Broker <- c(70,70,8,8,8,8,8,8,8,40)

我想用它们在 Main 中的相应元素替换 Broker 元素并生成类似于 Broker_Name 的输出:

Broker_Name <- c("HSBC","HSBC","UBS","UBS","UBS","UBS","UBS","UBS","UBS","MORGAN STANLEY")

已经尝试gsub并合并没有成功。

【问题讨论】:

  • Main$Broker[match(Broker, Main$Number)]

标签: r indexing gsub


【解决方案1】:

您想要映射值。有一个函数可以这样做:

library(dplyr)
Broker <- c(70,70,8,8,8,8,8,8,8,40)
Broker_Name <- mapvalues(Broker,Main$Number,as.character(Main$Broker))

【讨论】:

    【解决方案2】:

    你试过合并吗?

    Main <- data.frame(Number = c(3,70,40,8), Broker =      c("XP","HSBC","MORGAN STANLEY","UBS"))
    
    Broker_Num <- c(70,70,8,8,8,8,8,8,8,40)
    
    
    
    Broker_Name <- as.character(merge(as.data.frame(Broker_Num),Main,
                         by.y="Number",
                         by.x="Broker_Num",
                         all.x=T,
                         all.y=F,
                         sort=F)$Broker)
    

    【讨论】:

    • 它现在应该可以工作了,它已经被编辑所以现在输出是字符串
    【解决方案3】:

    你可以试试这个解决方案:

    Broker_Name <- c(1:length(Broker))
    
    for(ii in 1:length(Broker)) {
    
      x <- Broker[ii]
    
      Broker_Name[ii] <- as.character(Main[Main[,1] == x,2])
    
      }
    

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 2022-01-25
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2014-11-20
      相关资源
      最近更新 更多