使用这种基本应用程序时,我很难从导入的数据(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(它相当大)
答案 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>