使用R对数据帧中的单元进行条件着色

时间:2014-05-08 17:29:11

标签: r conditional

这是我目前面临的挑战。

我有data.frame名为“dx”

dx <- data.frame( Tasks = c('1','2','3','4'),
                  Phase1 = c('Done','Done','Done','WIP'),
                  Phase2 = c('WIP','Done','Done',''),
                  Phase3 = c('','WIP','Done',''))

我想使用数据帧dx中的数据,然后根据给定单元格包含的值为数据框着色。例如:“完成”在红色,空白单元格中着色,以黑色等着色。)

注意我不希望在单元格中看到文本而是用户定义的颜色。最终输出类似于Excel文件中的条件函数应用表。

enter image description here

1 个答案:

答案 0 :(得分:3)

以下是使用基本image函数的一种方法。

dx <- data.frame( Tasks = c('1','2','3','4'),
                  Phase1 = c('Done','Done','Done','WIP'),
                  Phase2 = c('WIP','Done','Done',''),
                  Phase3 = c('','WIP','Done',''))

ff<-factor(as.matrix(dx[,2:4]), 
    levels=c("Done","WIP",""), 
    labels=c("done","wip","-empty-")
)
fx<-matrix(as.numeric(ff), ncol=ncol(dx)-1)

#use labels to assign colors
col<-c(done="darkgreen",wip="orange","-empty-"="black")

imgflip<-function(x) {t(x[nrow(x):1,])}

image(imgflip(fx),
    breaks=(1:(nlevels(ff)+1))-.5,
    col=col[levels(ff)],
    xaxt="n", yaxt="n"
)
axis(2, at=seq(0,1,length.out=nrow(dx)), labels=rev(paste("Task",dx$Tasks)), las=2)
axis(3, at=seq(0,1,length.out=length(names(dx))-1), labels=names(dx)[-1])

将产生这张照片。

sample image