如何读取使用R存储为位掩码的值?

时间:2014-07-24 13:07:45

标签: r

我从

下载了一个nc文件
f=open.ncdf("0101.nc")
dimensions:"
[1] "Longitude   Size: 1440"
[1] "Latitude   Size: 720"
[1] "------------------------"

然后我想用这个:Bit Mask

A = get.var.ncdf(nc=f,varid="mask",verbose=TRUE)

我键入A,但我发现值为

       0 2 4 6 8 12 16 24 32 34 40 64 128

然而,文件的发起人说这是BitMAsks并给了我这个分类:

zen条件包含在位掩码中,第一位(为2 ^ 1;遵循C约定,我们从第零位开始计数)打开。以下是位定义列表:

1 个答案:

答案 0 :(得分:1)

当尝试以二进制格式有效地存储数据时,这些类型的make字段并不罕见。首先,我们可以将您的2 ^ n值表转换为整数进行解码

vv<-c("not land"=1,"ice"=2, "no valid data"=4, "high depth"=8,
    "high depth in band"=16, "negatl depth in-band"=32,
    "negepth in-band"=64, "no tband"=128, "no nband"=256)

然后你可以使用这样的函数进行解码

decode<-function(x) {
    sapply(x, function(z) {
        paste(names(vv[bitwAnd(z,vv)>0]), collapse=",")
    })
}

这里我们使用bitwAnd()将观察到的值与每个潜在的标志进行比较。如果我们想看到所有可能的值,我们可以做

decode(sort(unique(c(A))))

#  [1] ""                              "ice"                          
#  [3] "no valid data"                 "ice,no valid data"            
#  [5] "high depth"                    "high depth in band"           
#  [7] "high depth,high depth in band" "negatl depth in -band"        
#  [9] "negepth in-band"               "no tband"

或者您可以一次解码一个

decode(16)
# [1] "high depth in band"