R: Как заменить NA в столбце в том же кадре данных, где совпадают определенные столбцы? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть датафрейм 'Players' (отрывок ниже).Всякий раз, когда в столбце «match» указано «NA», я хочу заменить этот NA номером совпадения из отдельной строки, в которой есть одинаковые «Start.Date» и «Ground».Например, строка 96588 ниже имеет NA соответствия, но она имеет те же «Start.Date» и «Ground», что и строка 2. Строка 2 соответствует «1».Итак, в результате моего запроса я хочу заполнить 'match' в строке 96588 как '1'.

              Player            Start.Date        Inns_Bat    Ground     match
2:            NFD Thomson (AUS) 2018-08-09        1           Lord's     1
3:            NFD Thomson (AUS) 2014-12-12        3           Lord's     23
4:            NFD Thomson (AUS) 2018-08-09        1           Eden G     97
96588:        SM Curran (ENG)   2018-08-09        4           Lord's     NA

Ожидаемый результат:

              Player            Start.Date        Inns_Bat    Ground     match
2:            NFD Thomson (AUS) 2018-08-09        1           Lord's     1
3:            NFD Thomson (AUS) 2014-12-12        3           Lord's     23
4:            NFD Thomson (AUS) 2018-08-09        1           Eden G     97
96588:        SM Curran (ENG)   2018-08-09        4           Lord's     1

Итак, NAв строке 96588 заменяется на «1» из строки 2, поскольку «Start.Date» и «Ground» совпадают в обеих строках.Он НЕ заменяется из строки 3 или 4, поскольку «Start.Date» или «Ground» не соответствуют строке 96588.

1 Ответ

0 голосов
/ 05 октября 2018

Вот вариант tidyverse

library(tidvyerse)
df.new <- df %>%
    rowid_to_column("row") %>%
    group_by(Start.Date, Ground) %>%
    fill(match) %>%
    ungroup() %>%
    arrange(row) %>%
    select(-row)
## A tibble: 4 x 5
#  Player            Start.Date Inns_Bat Ground match
#  <fct>             <fct>         <int> <fct>  <int>
#1 NFD Thomson (AUS) 2018-08-09        1 Lord's     1
#2 NFD Thomson (AUS) 2014-12-12        3 Lord's    23
#3 NFD Thomson (AUS) 2018-08-09        1 Eden G    97
#4 SM Curran (ENG)   2018-08-09        4 Lord's     1


df.new[df.new$match == 1, ]
## A tibble: 2 x 5
#  Player            Start.Date Inns_Bat Ground match
#  <fct>             <fct>         <int> <fct>  <int>
#1 NFD Thomson (AUS) 2018-08-09        1 Lord's     1
#2 SM Curran (ENG)   2018-08-09        4 Lord's     1

Пример данных

df <- read.table(text =
    "Player            Start.Date        Inns_Bat    Ground     match
'NFD Thomson (AUS)' 2018-08-09        1           'Lord\\'s'     1
'NFD Thomson (AUS)' 2014-12-12        3           'Lord\\'s'     23
'NFD Thomson (AUS)' 2018-08-09        1           'Eden G'     97
'SM Curran (ENG)'   2018-08-09        4           'Lord\\'s'     NA", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...