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