根据 R 中的指定规则将 2 个向量组合为 1 个向量

Combining 2 vectors to 1 vector based on specified rules in R

我必须使用相同长度的向量 [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

非常感谢!

假设向量长度相等,并且成对元素之一始终是文本字符串,而另一个始终是 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_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"

希望你能更容易理解。

尝试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, ""))