tidyr软件包中的complete()
函数对于填写缺失的组合很有用。首先,您需要设置一个标志变量以指示是否存在数据,然后使用缺少的组合扩展数据框,并用0填充新的标志变量:
df <- df %>%
mutate(flag = TRUE) %>%
complete(id,year,fill = list(flag = FALSE))
ggplot(df,aes(id,fill = flag)) +
geom_tile()
编辑1:要添加透明度,请在alpha = 0.x
中添加geom_tile()
,其中x
是指示透明度的值。值越低,越透明。
EDIT2:要按缺失排序,请在ggplot
代码之前添加以下代码:
# Determine the order of the IDs
df_order <- df %>%
group_by(id) %>%
summarize(sum = sum(flag)) %>%
arrange(desc(sum)) %>%
mutate(order = row_number()) %>%
select(id,order)
# Set the IDs in order on the chart
df <- df %>%
left_join(df_order) %>%
mutate(id = fct_reorder(id,order))
,
我认为您需要在绘制之前进行一些预处理。创建一个临时变量(data_exist
),该临时变量表示该id
和year
的数据存在。然后使用complete
为每个years
填充丢失的id
并将其绘制出来。
library(tidyverse)
df %>%
mutate_all(~as.integer(as.character(.))) %>%
mutate(data_exist = 1) %>%
complete(id,year = min(year):max(year),fill = list(data_exist = 0)) %>%
mutate(data_exist = factor(data_exist)) %>%
ggplot() + aes(id,fill= data_exist) + geom_tile()
,
使用expand.grid
,您可以创建一个包含ID和年份的所有组合的数据框,然后对这些组合进行左连接以查看您是否在df
中有它们
all <- expand.grid(id=levels(df$id),year=levels(df$year)) %>%
left_join(df) %>%
mutate(present=ifelse(is.na(present),'0','1'))
ggplot(all,aes(as.numeric(id),as.numeric(year),fill= present)) +
geom_tile() +
scale_fill_manual(values=c('0'='red','1'='blue')) + # change default colors
theme(legend.position="None") # hide legend
本文链接:https://www.f2er.com/3112490.html