Сравните два столбца, используя позицию индекса - PullRequest
0 голосов
/ 28 июня 2019

The dataframe

У меня есть сценарий, в котором мне нужно сравнить два столбца в кадре данных. Условие состоит в том, что столбец Field1 имеет набор значений. Столбец Field2 имеет несколько значений, а остальные - NA. Есть еще один столбец с именем Field3. Итак, работа здесь заключается в сравнении значений Field1 с Field2. Условия для сравнения следующие.

  1. Если у Field1 есть соответствующая строка в Field2. Скопируйте значение строки Field2. Ex. Расположение и место. Итак, мне нужно скопировать Place.

  2. Если у Field1 нет соответствующего значения Field2. Тогда сравните Field1 с полем3. Скопируйте значение Field3 в Field2.

Пожалуйста, предложите способ сделать это.

dft <- data.frame(Field1 = c("Location","Time","Date","Problem"), 
          Field2 = c("Place","Balance","NA","NA"),
          Field3 = c("NA","NA","Pay","NA"))

1 Ответ

2 голосов
/ 28 июня 2019

Если я правильно понимаю проблему, вы пытаетесь заменить NA s в Field2 значениями от Field3 и заменить NA s в Field3 значениями от Field2. Предполагая, что для каждого наблюдения всегда есть одна NA и одна строка в Field2 или Field3, вы можете использовать dplyr coalesce, чтобы объединить их:

library(dplyr)
mutate(df, Field4 = coalesce(Field2, Field3))

#### OUTPUT ####

    Field1  Field2 Field3  Field4
1 Location   Place   <NA>   Place
2     Time Balance   <NA> Balance
3     Date    <NA>    Pay     Pay
4  Problem    <NA>  Check   Check

Просто убедитесь, что ваши NA действительно NA s не такие строки, как "NA". Например, сравните значения в этом фрейме данных с фреймом данных, который вы нам дали. Кроме того, убедитесь, что ваши переменные содержат строки, а не факторы:

df <- data.frame(Field1 = c("Location","Time","Date","Problem"), 
                  Field2 = c("Place","Balance", NA, NA),
                  Field3 = c(NA, NA, "Pay","Check"), stringsAsFactors = F)

Примечание : я заменил один NA, чтобы соответствовать кадру данных на изображении, т.е. c("NA","NA","Pay","NA") равен c("NA","NA","Pay","Check") в приведенном выше кадре данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...