【问题标题】:Combining 2 vectors to 1 vector based on specified rules in R根据 R 中的指定规则将 2 个向量组合为 1 个向量
【发布时间】:2018-11-03 15:48:54
【问题描述】:

我必须具有相同长度 [1:216] 的向量,并且我想根据一些规则将它们组合成 1 个向量。

理由:我已经从抓取页面中获得了这两个向量的描述。现在,描述被放置在一个没有唯一名称的框中,并且在我所有的观察中出现在 2 个不同的位置(因此也是 2 个不同的选择器小工具标识符)。我已经抓取了这两个位置并从中创建了 2 个变量,现在我想将它们组合为 1 个向量。

这就是向量现在的样子:

vect_1 
[1] Description 1
[2] NA 
[3] Description 3

vect_2 
[1] ""
[2] Description 2
[3] "" 

因此,我的代码需要指定,如果 NA 或 "" 则从其他向量进行观察,否则使用该向量的描述。我该怎么做?

我的输出应该是这样的:

vect_3 
[1] Description 1
[2] Description 2
[3] Description 3

提前非常感谢!

【问题讨论】:

    标签: r web-scraping data-cleaning


    【解决方案1】:

    试试dplyr::coalesce

    vec1 <- c("Description 1", NA, "Description 3")
    vec2 <- c("", "Description 2", "")
    dplyr::coalesce(vec1, vec2)
    # [1] "Description 1" "Description 2" "Description 3"
    

    以下内容更安全,因为 "" 可能被识别为有意义的值 - 使用 na_if(vec, value)

    dplyr::coalesce(na_if(vec1, ""), na_if(vec2, ""))
    

    【讨论】:

      【解决方案2】:

      请通过以下解决方案:

      vect_1=c("Description 1",NA,"Description 3")
      vect_1
      [1] "Description 1" NA              "Description 3"
      vect_2=c("","Description 2","")
      vect_2
      [1] ""              "Description 2" ""             
      
      vect_3=c()                     # Create an empty vector
      
      for(i in 1:length(vect_1)){
        if(is.na(vect_1[i])){        # If value in vect_1 is NA
        vect_3=c(vect_3,vect_2[i])   # Look into vect_2
        }
       else{                         # Else
       vect_3=c(vect_3,vect_1[i])    # Copy value from vect_1
       }
      }
      vect_3                         # Print vect_3
      [1] "Description 1" "Description 2" "Description 3"
      

      希望你更容易理解。

      【讨论】:

      • 嗨@Saurabh Chauhan,工作,谢谢!我决定选择这个选项,因为它最容易遵循和调整。
      【解决方案3】:

      假设向量的长度相等,并且配对元素中的一个始终是文本字符串,另一个始终是 NA 或“”,那么应该执行以下操作。如果情况并非总是如此,您可能需要稍作更改。

      vect_1 <- c("Description 1", NA, "Description 3")
      vect_2 <- c("", "Description 2", "")
      
      vect_combined <- ifelse(!is.na(vect_1) & vect_1 != "", vect_1, vect_2)
      vect_combined # Print
      #> [1] "Description 1" "Description 2" "Description 3"
      

      【讨论】:

      • 这个东西也可以:vect_combined&lt;-ifelse(!is.na(vect_1),vect_1,vect_2)
      猜你喜欢
      • 2021-12-06
      • 2018-05-30
      • 1970-01-01
      • 2013-03-09
      • 2011-12-27
      • 2015-06-29
      • 2016-05-19
      相关资源
      最近更新 更多