2017-06-21 11 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 

は、ここではいくつかの再現性のあるデータだ(私は簡単にするための要因に最初の変数に変換しました)。

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()かでそれを行うための方法は、おそらくあり

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

は、私は、次の試してみました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)) 
} 
関連する問題