Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于包含NAs的组值创建二维栅格、光栅或热图?_R_Heatmap_R Raster - Fatal编程技术网

R 如何基于包含NAs的组值创建二维栅格、光栅或热图?

R 如何基于包含NAs的组值创建二维栅格、光栅或热图?,r,heatmap,r-raster,R,Heatmap,R Raster,以下数据: df <- data.frame(cbind("Group_ID" = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4), "WBHO" = runif(20, 1.0, 7.0), "SI" = runif(20, 1.0, 7.0), "OORT" = c(2.34, 4.64, NA, 5.32, 3.23, 6.01, 5.43, 4.78, 3.98, 3.80, 4.45, NA, NA, 3

以下数据:

df <- data.frame(cbind("Group_ID" = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4), "WBHO" = runif(20, 1.0, 7.0), "SI" = runif(20, 1.0, 7.0), "OORT" = c(2.34, 4.64, NA, 5.32, 3.23, 6.01, 5.43, 4.78, 3.98, 3.80, 4.45, NA, NA, 3.18, 4.87, NA, NA, 5.73, 3.52, 4.89), "LMX" = runif(20, 1.0, 7.0),"RL" = runif(20, 1.0, 7.0),"AL" = c(1.54, NA, 1.08, 6.77, NA, NA, 4.56, NA, 5.34, 4.32, 2.45, 3.86, 6.21, 2.89, 7.32, 6.43, NA, 4.56, 3.89, 6.16),"SL" = runif(20, 1.0, 7.0),"RV" = runif(20, 1.0, 7.0),"PT" = runif(20, 1.0, 7.0),"SD" = runif(20, 1.0, 7.0), "HT" = runif(20, 1.0, 7.0), "RTL" = c(2.45, NA, 6.04, 2.88, 3.49, 2.30, NA, 5.32, 2.39, NA, 3.62, 3.22, 4.87, 2.91, 5.41, NA, NA, 4.78, 6.20, NA), "INB" = runif(20, 1.0, 7.0), "ETB" = runif(20, 1.0, 7.0)))
但是,这不起作用,因为其中包括NAs。但是,我希望使用NAs保留这些行。有没有一种方法可以让我在同一步中做到这一点

然后,我想创建光栅,我得到了以下代码,但我不完全确定如何在这种情况下应用:

library(raster)

r <- raster(ncol=nrow(df_new), nrow=15, xmn=0, xmx=4, ymn=0, ymx=15)
values(r) <- as.vector(as.matrix(df$WBHO, df$SI, df$OORT, df$LMX, df$RL, df$AL, df$SL, df$RV, df$PT, df$SD, df$HT, df$RTL,
                             df$INB, df$ETB)
plot(r, axes=F, box=F, asp=NA)
axis(1, at=seq(), 0:9)
axis(2, at=seq(), c("", colnames(df_new)), las=1)
库(光栅)

r我们可以使用
dplyr
tidyr
来计算平均值。之后,我们可以使用
cut
函数对值进行分类。然后,我们可以使用
ggplot2
中的
geom_tile
绘制热图。指定
x
变量
y
组ID
(转换为因子),并且
填充
基于
值2
。不需要
光栅
软件包

不清楚为什么要两组(1-3,5-7),都是绿色的。我的示例将红色指定给5-7组,但您可以根据需要轻松地进行更改

library(dplyr)
library(tidyr)

df_new <- df %>%
  gather(key = "variable", value = "value", - Group_ID) %>%
  group_by(Group_ID, variable) %>%
  summarise(value = mean(value, na.rm = TRUE)) %>%
  mutate(value2 = cut(value, breaks = c(1, 3, 5, 7), labels = c("Low", "Medium", "High"))) %>%
  ungroup()

library(ggplot2)

ggplot(df_new, aes(x = variable, y = factor(Group_ID), fill = value2)) +
  geom_tile() +
  scale_fill_manual(values = c("Low" = "Green", "Medium" = "Yellow", "High" = "Red")) + 
  labs(
    y = "Group_ID"
  )
库(dplyr)
图书馆(tidyr)
df_新%
聚集(key=“variable”、value=“value”、-Group\u ID)%>%
分组依据(组ID,变量)%>%
总结(值=平均值(值,na.rm=真))%>%
突变(值2=切割(值,断裂=c(1,3,5,7),标签=c(“低”、“中”、“高”))%>%
解组()
图书馆(GG2)
ggplot(df_新,aes(x=变量,y=因子(组ID),填充=值2))+
geom_瓷砖()+
刻度填充手动(数值=c(“低”表示“绿色”,“中”表示“黄色”,“高”表示“红色”))+
实验室(
y=“组ID”
)

OP提到了平均值。我认为应该添加一些类似于聚合的东西(value~key+Group\u ID,data=df\u new,FUN=mean)
。@RomanLuštrik现在我看到每个组有多个值。我已经更新了我的帖子来计算平均值,并将值分为不同的组。谢谢你们:)
library(dplyr)
library(tidyr)

df_new <- df %>%
  gather(key = "variable", value = "value", - Group_ID) %>%
  group_by(Group_ID, variable) %>%
  summarise(value = mean(value, na.rm = TRUE)) %>%
  mutate(value2 = cut(value, breaks = c(1, 3, 5, 7), labels = c("Low", "Medium", "High"))) %>%
  ungroup()

library(ggplot2)

ggplot(df_new, aes(x = variable, y = factor(Group_ID), fill = value2)) +
  geom_tile() +
  scale_fill_manual(values = c("Low" = "Green", "Medium" = "Yellow", "High" = "Red")) + 
  labs(
    y = "Group_ID"
  )