2016-12-05 3 views
2

私はデータフレームのリストを持っています。データフレームのリストの列のクラスを変更します。

df1 = data.frame(ID=c("id1", "id2", "id3"), A1 = c("A", "A", "B"), A2 = c("AA", "AA", "AA")) 
df2 = data.frame(ID=c("id2", "id3", "id4"), A1 = c("B", "B", "B"), A2=c("BB", "BB", "BB")) 
df3 = data.frame(ID=c("id1", "id2", "id3"), A1 = c("A", "A", "A"), A2 = c("AA", "BB", "BB")) 
listDF = list(df1, df2, df3) 

ファクタからクラスにクラスを変更するには良い方法があるのでしょうか。これは、私が試したものです:

d <- lapply(listDF, function(x) sapply(x[,"A1", "A2"], as.character)) 

このコードは、私が変更したい列を与えるが、ちょうどこれらの新しい列を再度追加する必要がクラスを変更していない方法はありますか? dplyrパッケージから

答えて

1

mutate_at()機能は、ここに便利来る:

library(dplyr) 
d <- lapply(listDF, function(df) mutate_at(df, .cols = 2:3, as.character)) 

あなたはまた.colsパラメータに列名を渡すことができます。

d <- lapply(listDF, function(df) mutate_at(df, .cols = c("A1", "A2"), as.character)) 

または正規表現で列を選択:

# mutate columns whose names start with A 
d <- lapply(listDF, function(df) mutate_at(df, vars(matches("^A")), as.character)) 

ベースRで3210

が、これは次のようになります。

d <- lapply(listDF, function(df) {df[c("A1", "A2")] <- lapply(df[c("A1", "A2")], as.character); df}) 
+0

data.tableはあなたにPsidomをありがとう使用することができ、それは動作しますが、私は追加することなく、ベースRでの解決策になる可能性があり期待していたものの、機能... – user971102

+0

ベースRで簡単にでも簡単に行えます。アップデートを見る! – Psidom

+0

ああ素晴らしい!本当にありがとう!! – user971102

1

我々は

lapply(listDF, function(df) setDT(df)[, (2:3) := lapply(.SD, as.character), .SDcols = 2:3]) 
関連する問題