#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