簡體   English   中英

根據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或“”,然后從其他向量中進行觀察,否則使用該向量中的描述。 我該怎么辦IR?

我的輸出應如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM