2017-06-21 73 views
-1

我需要先按行拆分數據幀,現在我有65個數據幀的巨大列表。爲列表中的每個數據幀轉換1列

df_list = split(df, list(df$group)) 
new_col_name = c("A", "B","group") 
df_list = lapply(df_list, setNames, nm=new_col_name) 
df_list = lapply(df_list, function(x) x[-1,]) 

我想將列A(跨列表中的所有數據框)轉換爲因子而不是數字。

>head(df_list) 

$`0` 
     A   B count 
.3375E+03 .5295E+00  0 
.3380E+03 .4412E+00  0 
.3385E+03 .0123E+00  0 

$`1` 
     A   B count 
.3370E+03 .4939E+00  1 
.3375E+03 .5295E+00  1 
.3380E+03 .5679E+00  1 

$`2 
     A   B count 
.3370E+03 .4934E+00  2 
.3375E+03 .5286E+00  2 
.3380E+03 .5673E+00  2 

等等

下面是一些再生的數據(我已經轉換所述第一變量的一個因素爲簡單起見)。

test = data.frame(A = c(".3375E+03", ".3380E+03", ".3385E+03"), 
B = c(.5295E+00 , .4412E+00, .0123E+00), 
C = c(0,0,0)) 

我曾嘗試以下:

for (i in df_list){ 
    i$A = as.numeric(as.character(i$A)) 
} 

但不知何故,這實際上並沒有得到分配給df_list:

> str(df_list[[1]]) 
'data.frame': 549 obs. of 3 variables: 
$ A  : Factor w/ 551 levels ".3370E+03",".3375E+03",..: 2 3 4 5 6 7 8 9 10 11 ... 

有可能是一種方式與apply()或做sapply()但我無法弄清楚。

+0

檢查:https://stackoverflow.com/questions/23369333/convert-factors-in-2-data-frames-of-a-list-into -數字 –

回答

1

隨着for(i in ...),每個i是一個元素的副本。您只分配給副本,但不影響原始副本。要引用特定對象,最好使用名稱或索引。所以,讓你的代碼的工作方式是:

for (i in seq_along(df_list)) { 
    df_list[[i]]$A = as.numeric(as.character(df_list[[i]]$A)) 
} 
相關問題