将附加到列的属性数据复制为另一列
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)
我有一个数据集,每一列都有一个存储数据的属性。意思是,列具有逐行值,然后列的属性也具有值。
我可以使用 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)