删除data.table列标签/属性(导入的数据)

时间:2019-05-22 03:17:22

标签: r attributes data.table label

使用这种基本应用程序时,我很难从导入的数据(SAS)中删除data.table列标签/属性

我的data.table DT是从SAS文件导入的。并非所有列都具有标签,有些列具有两个标签。导入时,我无法共享数据(因此无法复制),但这是DT的部分结构:

if (this.platform.is('ios')) {
    NativeStorage.initWithSuiteName(APP_GROUP_ID);
}

我正在尝试删除所有属性,因为当我使用某些列创建新闻时,这些属性是在新列中继承的,这很烦人并且是不希望的(防止我与没有标签的另一个data.table合并)。我认为防止这种情况的唯一方法是从原始数据DT中删除属性(标签)。

我尝试了

> str(DT)
Classes ‘data.table’ and 'data.frame':  96293709 obs. of  150 variables:
 $ Col1               : chr  "Y" "N" "N" "N" ...
  ..- attr(*, "label")= chr "some label, description goes on and on"
 $ Col2               : chr  "N" "N" "N" "Y" ...
  ..- attr(*, "label")= chr "some label 2, description goes on and on"
 $ Col3                    : Date, format: "1994-08-07" "1994-08-07" "1994-08-07" "1994-08-07" ...
 $ Col4                          : chr  "M" "M" "M" "M" ...
  ..- attr(*, "label")= chr "some label 3, description goes on and on"
  ..- attr(*, "format.sas")= chr "$"
 $ Col5                     : num  1e+07 1e+07 1e+07 1e+07 1e+07 ...
  ..- attr(*, "label")= chr "some label 4, description goes on and on"
 $ Col6                       : Date, format: "2000-01-01" "2005-03-10" "2013-06-01" "2015-06-01" ...

,我没有任何错误。但什么也没发生。 在尝试了上述内容并检查了结构之后,我得到了与以前相同的东西。标签/属性尚未删除。 我在这里做错了什么? 我知道我必须以某种方式使用setattr,因为我不想复制DT(它相当大)

1 个答案:

答案 0 :(得分:2)

我认为属性是针对每一列存储的,而不是针对data.table的。检查attributes(DT)lapply(DT, attributes),看看是否是这种情况。这是一个示例,我认为它可以复制您要尝试执行的操作:

DT <- data.table(a=1:3,b=2:4)
attr(DT$a, "label") <- "a label"
attr(DT$b, "label") <- "a label"
attr(DT$b, "sas format") <- "ddmmyy10."

str(DT)
#Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
# $ a: atomic  1 2 3
#  ..- attr(*, "label")= chr "a label"
# $ b: atomic  2 3 4
#  ..- attr(*, "label")= chr "a label"
#  ..- attr(*, "sas format")= chr "ddmmyy10."
# - attr(*, ".internal.selfref")=<externalptr> 

DT[, names(DT) := lapply(.SD, setattr, "label", NULL)]
DT[, names(DT) := lapply(.SD, setattr, "sas format", NULL)]

str(DT)
#Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
# $ a: int  1 2 3
# $ b: int  2 3 4
# - attr(*, ".internal.selfref")=<externalptr>