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

时间:2017-09-13 22:14:47

标签: r attributes packages attr

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

我可以使用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()来捕获属性数据,然后将其复制为另一个调整列。

我对如何递归地执行此操作以及如何以优化方式进行操作感到困惑。

请分享建议,谢谢。

1 个答案:

答案 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)