R заменить NA значением из соседнего ряда - PullRequest
0 голосов
/ 24 октября 2019

У меня есть фрейм данных "df" с двумя столбцами. Столбец 2 содержит как допустимые строки, так и пропущенные значения, заполненные «NA».

Пример ввода:

> df

ENSMMUG00000023296 PGBD2 
ENSMMUG00000036181 U6
ENSMMUG00000064799 NA
ENSMMUG00000057389 LYPD8

Я хочу заменить значения «NA» на соответствующее значение из столбца 1. Чтобы получить следующий вывод.

Пример требуемого вывода:

> df

ENSMMUG00000023296 PGBD2 
ENSMMUG00000036181 U6
ENSMMUG00000064799 ENSMMUG00000064799
ENSMMUG00000057389 LYPD8

Я попытался сделать это с помощью инструмента na.locf из пакета zoo, но я не понимаю, как указать, что значение замены следует брать из столбца 1.

Неудачная попытка:

> library(zoo)
> na.locf(df)

ENSMMUG00000023296 PGBD2 
ENSMMUG00000036181 U6
ENSMMUG00000064799 U6
ENSMMUG00000057389 LYPD8

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Вы можете просто использовать приведенное ниже, предполагая, что у вас есть два столбца: -

df$column2[is.na(df$column2)] <- df$column1[is.na(df$column2)]

Это не охватывает крайний случай, в котором второй столбец также NA.

1 голос
/ 24 октября 2019

Другой вариант, при условии, что у вас есть data.frame со столбцами 'column1' и 'column2'

library(dplyr)

df <- tribble(~column1, ~column2,
              'ENSMMUG00000023296', 'PGBD2',
              'ENSMMUG00000036181', 'U6',
              'ENSMMUG00000064799', NA,
              'ENSMMUG00000057389', 'LYPD8')
df
#> # A tibble: 4 x 2
#>   column1            column2
#>   <chr>              <chr>  
#> 1 ENSMMUG00000023296 PGBD2  
#> 2 ENSMMUG00000036181 U6     
#> 3 ENSMMUG00000064799 <NA>   
#> 4 ENSMMUG00000057389 LYPD8

mutate(df, column2 = ifelse(is.na(column2), column1, column2))
#> # A tibble: 4 x 2
#>   column1            column2           
#>   <chr>              <chr>             
#> 1 ENSMMUG00000023296 PGBD2             
#> 2 ENSMMUG00000036181 U6                
#> 3 ENSMMUG00000064799 ENSMMUG00000064799
#> 4 ENSMMUG00000057389 LYPD8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...