对于初学者:我现在在这个问题上搜索了几个小时 - 所以如果答案应该是微不足道的,请原谅我......
我想要做的是从 data.frame 中删除一行(第 101 号)。它包含测试数据,不应出现在我的分析中。我的问题是:每当我从 data.frame 中提取子集时,属性(尤其是评论)都会丢失。
str(x)
# x has comments for each variable
x <- x[1:100,]
str(x)
# now x has lost all comments
有据可查的是,子集将删除所有属性-到目前为止,这非常清楚。该手册(例如http://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.data.frame.html)甚至提出了一种保留属性的方法:
## keeping special attributes: use a class with a
## "as.data.frame" and "[" method:
as.data.frame.avector <- as.data.frame.vector
`[.avector` <- function(x,i,...) {
r <- NextMethod("[")
mostattributes(r) <- attributes(x)
r
}
d <- data.frame(i= 0:7, f= gl(2,4),
u= structure(11:18, unit = "kg", class="avector"))
str(d[2:4, -1]) # 'u' keeps its "unit"
我还没有深入了解 R 以了解这里到底发生了什么。但是,简单地运行这些行(最后三行除外)不会改变我的子集的行为。使用带有适当向量的命令子集()(100 次 TRUE + 1 FALSE)给了我相同的结果。并且简单地将属性存储到一个变量并在子集之后恢复它,也不起作用。
# Does not work...
tmp <- attributes(x)
x <- x[1:100,]
attributes(x) <- tmp
当然,我可以将所有评论写入向量(var=>comment)、子集并使用循环将它们写回——但这似乎不是一个有根据的解决方案。而且我很确定我会在未来的分析中遇到具有其他相关属性的数据集。
所以这就是我在stackoverflow、谷歌和脑力方面的努力陷入困境的地方。如果有人可以帮助我提示,我将不胜感激。谢谢!