Используйте один столбец, чтобы покрыть другой столбец и принять другое значение столбца, когда NA - PullRequest
0 голосов
/ 01 апреля 2019

Моя система R 3.5.1 с Rstudio 1.1.463

В моем фрейме данных есть 2 столбца, cola и colb df:

df <- data.frame(
    cola = c("A","C",NA,"C"),
    colb = c("C",NA,"C","D"))

df как показано ниже:

cola   colb
A        C
C        NA
NA       C
C        D

Я хочу использовать colb для покрытия cola, когда colb не NA, принять cola, когда colb равно NA.

Ожидаемый результат, как показано ниже:

cola   colb   
C        C       
C        NA     
C        C      
D        D      

Как это сделать? Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 01 апреля 2019

coalesce функция из dplyr пакета может быть полезна здесь:

library(dplyr)

df %>%
  mutate(cola = coalesce(colb, cola))

выход:

  cola colb
1    C    C
2    C <NA>
3    C    C
4    D    D
1 голос
/ 01 апреля 2019

С dplyr. mutate_all сделано, так как в данных выборки есть факторы.

df %>% 
  mutate_all(as.character) %>% 
  mutate(cola=ifelse(is.na(colb),cola,colb))

Результат:

  cola colb
1    C    C
2    C <NA>
3    C    C
4    D    D
0 голосов
/ 02 апреля 2019

Я предоставляю решение, как показано ниже:
следует преобразовать factor столбец в character первый столбец
df$cola<-ifelse(is.na(df$colb),df$cola,df$colb)

В противном случае используйте df<-mutate(df,cola = coalesce(colb, cola))

0 голосов
/ 01 апреля 2019

Мы можем заменить значения в cola, когда colb не NA.

df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)]

#  cola colb
#1    C    C
#2    C <NA>
#3    C    C
#4    D    D

data

df <- data.frame(
 cola = c("A","C",NA,"C"),
 colb = c("C",NA,"C","D"), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...