データ型が混在するdata.frameを考えます。
奇妙な目的のために、ユーザーはすべての列を文字に変換する必要があります。最善の方法は?解決策のきちんとした試みはこれです:
_map(mtcars,as.character) %>% map_df(as.list) %>% View()
c2<-map(mtcars,as.character) %>% map_df(as.list)
_
str(c2)
を呼び出すときは、すべての文字を含むtibbleまたはdata.frameを言う必要があります。
他のオプションは、write.csv()
またはwrite_csv()
のパラメーター設定で、結果のファイル出力で同じことを実現します。
dplyr::mutate_all
を使用することもできます。
library(dplyr)
mtcars %>%
mutate_all(as.character)
mutate_all
およびlapply
の後にdata.frameを再キャストすると、data.frameの属性が変更されます。基になるdata.frameに関連付けられているrow.names、labels、またはその他の属性を保持する必要がある場合は、次を試してください。
x[, ] <- lapply(x[, ], as.character)
これにより、列が適切な文字クラスに変換され、data.frameの属性が保持されます。
例
x <- mtcars
attr(x, "example") <- "1"
以下の最後の場合のみ、example
属性が保持されます。
x %>%
mutate_all(as.character) %>%
attributes()
data.frame(lapply(x, as.character)) %>%
attributes()
x[, ] <- lapply(x[, ], as.character)
attributes(x)
入力が単一列のdata.frameである場合、x[, ]
は、data.frameではなくベクトルを返します。これに対処するには、 data.frameから単一の列をdata.frameとして抽出する方法 を参照してください。
data.table
-を使用した最も効率的な方法
data.table::setDT(mtcars)
mtcars[, (colnames(mtcars)) := lapply(.SD, as.character), .SDcols = colnames(mtcars)]
注:これを使用して、data table
のいくつかの列を目的の列タイプに変換できます。
すべての列を文字に変換する場合は、次のようなこともできます。
to_col_type <- function(col_names,type){
get(paste0("as.", type))(dt[[col_names]])
}
mtcars<- rbindlist(list(Map(to_col_type ,colnames(mtcars),"character")))
これはうまくいくかもしれませんが、それが最良かどうかはわかりません。
df = data.frame(lapply(mtcars, as.character))
str(df)