将值替换为 1 并将空单元格替换为 0 以生成热图?

Replace values with 1 and empty cells with 0 to generate a heatmap?

在下面的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"))

across() 试试这个 dplyr 解决方案。您有不同的 类 个变量,因此您可以将它们全部格式化为字符,然后进行替换。接下来是 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