将附加到列的属性数据复制为另一列

Copying Attribute Data Attached To Column As Another Column

我有一个数据集,每一列都有一个存储数据的属性。意思是,列具有逐行值,然后列的属性也具有值。

我可以使用 attr() 读取作为属性附加到列的数据。但是,我的目标是捕获这些属性值并复制为列。

阅读属性

> attr(data$`column1`, "metadata")$DP.SomeNumber1
"6200"
> attr(data$`column2`, "metadata")$DP.SomeNumber2
"7200"

输入数据

column1 column2
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05
 -0.01   0.05

然后使用上面的代码,我想附加如下所示的值。

输出数据

column1 SomeNumber1 column2 SomeNumber2
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200
 -0.01    6200        0.05     7200

对于超过 1000 列的数据,我如何递归地实现它?每次读取都需要调用具有唯一列名的 attr() 来捕获属性数据,然后将其复制为另一个调整列。

我对如何以优化的方式递归地做这做那感到困惑。

请分享建议,谢谢。

很遗憾,您没有提供可重现的示例。所以我创建了一个并希望它能解决您的问题:

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)

使用 lapply 您可以迭代数据框的列。对于每一列,属性都作为新列添加到原始数据框中。这是我的解决方案的代码:

# create function to extract attributes of a given column(name) an create new column in original dataframe
attr2col <- function(col) {
  myAttr = attr(data[,col], "metadata")
  data[,sub("^DP\.", "", names(myAttr))] <<- myAttr[[names(myAttr)]]
}

# iterate over colums of original dataframe
lapply(names(data), attr2col)