Заменить значения на 1 и пустые ячейки на 0, чтобы сгенерировать тепловую карту?

#r #heatmap

#r #тепловая карта

Вопрос:

В следующем df некоторые ячейки в столбце содержат значения (числовые, логические, символьные), а некоторые пустые. Я хочу присвоить значение 1 всем ячейкам, которые не являются пустыми, и присвоить значение 0 всем пустым ячейкам и хочу создать newdf. Используя этот newdf, я хочу сгенерировать тепловую карту, сгруппированную по типу «гражданин» по оси y. Любая помощь?

 structure(list(ID = c("ID123", "ID456", "ID523", "ID875", "ID782", 
"ID572", "ID900"), Citizen = c("US", "CN", "MX", "US", "US", 
"CA", "CA"), Ht = c("6", "NA", "5", "6", "5", NA, "6"), Wt = c("200", 
"140", "160", NA, "NA", "175", NA), Age = c("NA", "45", NA, "32", 
"60", "44", "30"), income = c("60", "50", "30", "20", "40", "NA", 
"20"), sex = c("M", "F", "NA", NA, "M", "M", "F"), `Traffic vio` = c(TRUE, 
FALSE, TRUE, FALSE, NA, TRUE, TRUE), Greets = c("Hello", "Bonjour", 
"Hola", "Hi", "Hello", "Hello", "Bonjour")), row.names = c(NA, 
-7L), class = c("tbl_df", "tbl", "data.frame"))
  

Комментарии:

1. Посмотрите ?is.na и используйте ! для отрицания результата.

2. @markus: Я думаю, мне нужно немного больше информации, чем это.

Ответ №1:

Попробуйте это dplyr решение с across() помощью . У вас разные классы переменных, поэтому вы можете отформатировать их все как символы, а затем выполнить замену. Далее код для замены 0-1:

 library(dplyr)
#Code
#First make variables in standard format
df %>%
  mutate(across(Ht:Greets,~as.character(.))) %>%
  #Now mutate to 0-1
  mutate(across(Ht:Greets,~ifelse(is.na(.),0,1)))
  

Вывод:

 # A tibble: 7 x 9
  ID    Citizen    Ht    Wt   Age income   sex `Traffic vio` Greets
  <chr> <chr>   <dbl> <dbl> <dbl>  <dbl> <dbl>         <dbl>  <dbl>
1 ID123 US          1     1     1      1     1             1      1
2 ID456 CN          1     1     1      1     1             1      1
3 ID523 MX          1     1     0      1     1             1      1
4 ID875 US          1     0     1      1     0             1      1
5 ID782 US          1     1     1      1     1             0      1
6 ID572 CA          0     1     1      1     1             1      1
7 ID900 CA          1     0     1      1     1             1      1