我有一个数据集,每列都有一个存储数据的属性。意思是,列具有行方向的值,然后列的属性也具有值。
我可以使用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()
来捕获属性数据,然后将其复制为另一个调整列。
我对如何递归地执行此操作以及如何以优化方式进行操作感到困惑。
请分享建议,谢谢。
答案 0 :(得分:1)
不幸的是,您没有提供可重现的示例。所以我创建了一个并希望它适合你的问题:
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)