【问题标题】:How to paste together a vector element with the previuos according to a condition如何根据条件将矢量元素与前一个元素粘贴在一起
【发布时间】:2019-11-07 07:04:32
【问题描述】:

我从带有rvest 的网络源获取数据,然后我得到了一个向量,比如x,它的长度与我的其他向量不同(所以我不能将它们组合成一个表)。切入正题:原因是每次在vec中看到元素'nuovo'(位置x[11]),我就知道应该和前一个完全贴合,那么我也应该取消元素'nuovo'因为我需要一个 25 长度的向量。

x  = c("Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"nuovo" ,"Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina")

length(x) = 26

然后我需要x 是这样的:

x  = c("Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina nuovo","Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina" ,"Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina", "Vetrina",
"Vetrina" ,"Vetrina")

length(x) = 25

【问题讨论】:

    标签: r string loops if-statement


    【解决方案1】:

    你可以用这个:

    # First find the elements we wish to remove
    nuovo = which(x=="nuovo")
    x = x[-nuovo]
    
    # Now paste into the preceding elements.
    nuovo2 = nuovo - seq_along(nuovo)
    x[nuovo2] = paste(x[nuovo2], "nuovo")
    

    同样,您也可以颠倒这些操作的顺序并在删除之前粘贴

    x[nuovo - 1] = paste(x[nuovo - 1], "nuovo")
    x = x[-nuovo]
    

    【讨论】:

      【解决方案2】:

      这是base R 中的一个解决方案。首先你得到nuovo 的位置,然后paste 它到前一个位置。最后你删除了nuovo 位置。

      x <- c("Vetrina" ,"Vetrina" ,"Vetrina",
             "Vetrina" ,"Vetrina", "Vetrina",
             "Vetrina" ,"Vetrina" ,"Vetrina",
             "Vetrina" ,"nuovo" ,"Vetrina",
             "Vetrina" ,"Vetrina" ,"Vetrina",
             "Vetrina" ,"Vetrina" ,"Vetrina",
             "Vetrina" ,"Vetrina", "Vetrina",
             "Vetrina" ,"Vetrina", "Vetrina",
             "Vetrina" ,"nuovo")
      
      pos <- x == "nuovo"
      x[c(pos[-1], F)] <- paste(x[c(pos[-1], F)], "nuovo")
      x <- x[!pos]
      
      length(x)
      > 24
      

      【讨论】:

        【解决方案3】:

        dplyr() 涉及lag() 的一种可能性:

        x <- ifelse(lag(x, default = first(x)) == "nuovo", paste(x, lag(x)), x)
        x[-grepl("nuovo", x)]
        
         [1] "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"      
         [6] "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina nuovo" "Vetrina"      
        [11] "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"      
        [16] "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"      
        [21] "Vetrina"       "Vetrina"       "Vetrina"       "Vetrina"  
        

        【讨论】:

          猜你喜欢
          • 2021-07-27
          • 2016-11-16
          • 2015-11-27
          • 1970-01-01
          • 2016-03-29
          • 1970-01-01
          • 1970-01-01
          • 2011-09-18
          • 2021-02-20
          相关资源
          最近更新 更多