我有一个数据集,它有attributes
,当我用这个数据做rbind()
时,我失去了所有的属性。
在使用rbind()
时,是否可以复制所有属性?两个数据集中的列数相同,包括列名。
可复制数据
> attr(output$column1, "metadata")$DP.SomeNumber1
NULL
> attr(output$column2, "metadata")$DP.SomeNumber2
NULL
> column1 <- rep(-0.01, 8)
> attr(column1, "metadata")$DP.SomeNumber1 <- "6200"
> column2 <- rep(0.05, 8)
> attr(column2, "metadata")$DP.SomeNumber2 <- "7200"
> data <- data.frame(column1, column2)
> attr(data$column1, "metadata")$DP.SomeNumber1
[1] "6200"
> attr(data$column2, "metadata")$DP.SomeNumber2
[1] "7200"
> newdata <- as.data.frame(matrix(0, nrow = 3, ncol = ncol(data)))
> colnames(newdata) <- colnames(data)
> output <- rbind(newdata,data)
> attr(output$column1, "metadata")$DP.SomeNumber1
NULL
> attr(output$column2, "metadata")$DP.SomeNumber2
NULL
当在data.table()
库中使用rbindlist()
时,我仍然没有属性:
> testdata <- rbindlist(list(newdata, data))
> attr(testdata$column1, "metadata")$DP.SomeNumber1
NULL
> attr(testdata$column2, "metadata")$DP.SomeNumber2
NULL
以上属性示例归功于MarkusN。
谢谢
更新1
我尝试将copy.attributes()
作为suggested here,但即使这样,属性也没有复制到新的 Dataframe 。
更新2
下面的工作,但我不能这样做,当我有1000+列。下面我专门复制附加到列的属性。
> column1 <- rep(-0.01, 8)
> attr(column1, "metadata")$DP.SomeNumber1 <- "6200"
> column2 <- rep(0.05, 8)
> attr(column2, "metadata")$DP.SomeNumber2 <- "7200"
> data <- data.frame(column1, column2)
> print(attributes(data$column1))
$metadata
$metadata$DP.SomeNumber1
[1] "6200"
> print(attributes(data$column2))
$metadata
$metadata$DP.SomeNumber2
[1] "7200"
> newdata <- as.data.frame(matrix(0, nrow = 3, ncol = ncol(data)))
> colnames(newdata) <- colnames(data)
> output <- rbind(newdata,data)
> attributes(output$column1) <- attributes(data$column1)
> attributes(output$column2) <- attributes(data$column2)
> attr(output$column1, "metadata")$DP.SomeNumber1
[1] "6200"
> attr(output$column2, "metadata")$DP.SomeNumber2
[1] "7200"
有什么建议吗,我如何递归地引用附加到列的属性?
更新3
对于我的问题,以下解决方案有效,因为我只有三个我感兴趣的属性:
columnNumber <- 1
for (columnNumber in 1:length(data)){
output[1,columnNumber] <- attr(data[,columnNumber], "metadata")$DP.SomeNumber1
output[2,columnNumber] <- attr(data[,columnNumber], "metadata")$DP.SomeNumber2
output[3,columnNumber] <- attr(data[,columnNumber], "metadata")$DP.SomeNumber3
}
上面的解决方案是特定于情况的,但是只要可以访问带有属性的原始数据,就可以提取rbind()
之后的属性(实际上rbind()
在这里变得多余)。此外,列对齐不应与新数据集不同,否则解决方案需要更具适应性。
1条答案
按热度按时间wgxvkvu91#
很晚了,但我或多或少也想复制属性。以下是我的解决方案(参见here的一些谬误):
希望这能帮到你的案子...