2017-09-13 56 views
0

我有一個數據集,每列都有一個存儲數據的屬性。含義是,列具有行明智的值,然後列的屬性也具有值。複製屬性數據作爲另一列附加到列

我可以使用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

不幸的是,您沒有提供可重複的示例。所以我創建了一個並希望它適合您的問題:

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) 
+0

。@ MarkusN - 謝謝。函數(col)中的'col'是什麼?如果我是正確的,它必須從'attr2col()'傳遞。 –

+0

@Chetan Arvind Patil - 它實際上是列名,在lapply中傳遞。長形式將是lapply(名稱(數據),函數(x)attr2col(x))。 – MarkusN

+0

@ MarkusN - 我爲'myAttr [[names(myData)]]'得到'Error:subscript out of bounds'。在'myAttr'中,我確實獲得了所有必需的屬性。有什麼建議嗎? –

相關問題