добро пожаловать в SO.
Спасибо за предоставленные примеры данных, это действительно полезно!
Я бы лично занялся этим, используя пакет dplyr
и функцию coalesce()
(если вы знакомы с SQL
, вы можете узнать эту функцию, если нет, не волнуйтесь!).
Функция coalecse()
принимает первое не-NA значение для двух или более векторов. Вы можете использовать его самостоятельно или, по своему усмотрению, внутри функции mutate()
(также из dplyr
), которая полезна для создания / изменения столбцов внутри фрейма данных:
library(dplyr)
behavior<-c("run","jump","play","walk","jump","walk","run","play","jump","jump")
game<-c(NA,"tag",NA,NA,NA,"slide",NA,"tag",NA,"hopscotch")
# Make the data frame, using stringsAsFactors = FALSE to make sure our data
# get treated as characters, not factors
test <- data.frame(behavior = behavior, game = game, stringsAsFactors = FALSE)
dplyr::mutate(
test,
behavior = dplyr::coalesce(game, behavior)
)
behavior game
1 run <NA>
2 tag tag
3 play <NA>
4 walk <NA>
5 jump <NA>
6 slide slide
7 run <NA>
8 tag tag
9 jump <NA>
10 hopscotch hopscotch
Чтобы помочь визуализировать немного, давайте создадим новый столбец (вместо перезаписи behavior
):
mutate(
test,
new = coalesce(game, behavior)
)
behavior game new
1 run <NA> run
2 jump tag tag
3 play <NA> play
4 walk <NA> walk
5 jump <NA> jump
6 walk slide slide
7 run <NA> run
8 play tag tag
9 jump <NA> jump
10 jump hopscotch hopscotch
Итак, coalesce()
смотрит на game
, а затем behavior
, если есть значение в game
is использует его, если его нет, он смотрит на behavior
и вместо этого использует это значение (и если бы в нем не было значения, он использовал бы NA
).
Если вам нравится такой подход, я бы порекомендовал взглянуть на (отлично) книгу R for Data Science (бесплатно онлайн здесь: https://r4ds.had.co.nz/) и коллекцию пакетов tidyverse
( https://www.tidyverse.org/).