Объединение 2 векторов в 1 вектор на основе заданных правил в R - PullRequest
0 голосов
/ 24 мая 2018

У меня есть векторы одинаковой длины [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

Большое спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Пожалуйста, пройдите следующее решение:

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"

Надеюсь, вам будет легче понять.

0 голосов
/ 24 мая 2018

Попробуйте 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, ""))
0 голосов
/ 24 мая 2018

Если предположить, что векторы имеют одинаковую длину и что один из спаренных элементов всегда будет текстовой строкой, а другой всегда будет 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...