2017-09-26 35 views
0

我試圖在3個獨立的數據框中設置相同的因子水平,所以我試圖通過列表和循環更有效地做到這一點。R:通過數據幀循環並重新分配因子水平

dlist <- list(d1, d2, d3) 
for (i in 1:length(dlist)) { 
    dlist[[i]]$myFactor <- factor(dlist[[i]]$myFactor, levels=c("l1", "l2")) 
} 

這似乎是更新因子水平在DLIST複製dataframes,而不是爲自己dataframes。我如何獲得d1 $ myFactor,d2 $ myFactor,d3 $ myFactor來更改?

+1

你在一個共同的[R設計問題絆倒了。如果你有'd1','d2'和'd3',你基本上有3個相關的對象。考慮將'column1','column2'和'column3'放在一個名爲'd1'的'data.frame'中,可以很容易地循環。您應該類似地在'dlist'中將類似的'data.frame'分組,然後您可以循環。 (或者,也可以將'd1/2/3'全部放入一個長數據框中,用一個'id'列標記它們最初來自哪個數據集)。 – thelatemail

回答

2

當您將data.frames放入列表dlist中時,它們不再鏈接到原始data.frames。更新dlist中的值不會更新d1d2d3中的值。

您應該從這裏開始使用dlist。您可以使用列表中的索引值引用各個元素(data.frames)。

如果你希望他們回來淘汰之列,你必須這樣做逐一:

d1 <- dlist[[1]]