【问题标题】:Dropping a column from a data.frame causes unwanted loss of an attribute从 data.frame 中删除列会导致不必要的属性丢失
【发布时间】:2021-04-03 17:47:15
【问题描述】:

我想从 data.frame 中删除一列。但是当我这样做时, data.frame 的一个属性会丢失,这是我不想要的。首先是设置:

d <- data.frame(a = 1, b = 2, c = 3)
attr(d, "test_attribute") <- "something"
d2 <- d
d
#>   a b c
#> 1 1 2 3

test 属性存在:

attributes(d2) # contains $test_attribute [1] "something"

现在我想删除第二列 - 但大多数方式都会破坏该属性:

attributes(d2[, -2]) # it's gone
attributes(dplyr::select(d2, -2)) # it's gone

我找到了一种保存方法:

d3 <- d2
d3[2] <- NULL
attributes(d3)

为什么test_attribute 在前两种情况下会被删除,但在使用最后一种方法时不会?

【问题讨论】:

  • 这是一个原始函数[。源代码可以给出一些指示 -do_subset

标签: r dataframe attr


【解决方案1】:

?Extract 描述了这种行为。

子集(空索引除外)将删除除名称、dim 和 dimnames 之外的所有属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多