私はこのようなデータフレームを持っています:
df <- data.frame(
v1 = sample(c("L1","L2"),5,replace = TRUE),
v2 = sample(c("F1","F3"),5,replace = TRUE),
v3 = sample(seq(1,5),5,replace = T)
)
(1)名前付きリストに基づいて変数のタイプを設定したい:
typs <- list("v1" = "factor", "v2" = "factor", "v3" = "numeric")
(2)因子変数のレベルを設定するには:
list.levels <- list("v1" = c("L1","L2","L3"), "v2" = c("F1","F2","F3"))
理想的には、動的な列数を持つデータフレームに適用できる一般化されたアプローチを使用したいと思います。
クリーニングを行うには、独自の関数を作成する必要があります。これが1つの可能性です
fix_data <- function(data, types=NULL, flevels=NULL) {
if(!is.null(types) && length(types)>0) {
data[,names(types)] <- Map(function(col, type) {
if (type=="factor") {
factor(data[[col]])
} else if (type=="numeric") {
as.numeric(data[[col]])
} else {
stop(paste("unsupported type:", type))
}
}, names(types), types)
}
if(!is.null(flevels) && length(flevels)>0) {
data[,names(flevels)] <- Map(function(col, levels) {
factor(data[[col]], levels=levels)
}, names(flevels), flevels)
}
data
}
そして、それをのように呼びますfix_data(df, typs, list.levels)
。新しいdata.frameが返されるため、元のフレームを上書きするか、新しい変数に保存することができます。
基本的な考え方は、リスト内の名前をループして適切な変換を行うことです。Map
リスト内の名前と値を反復処理するために使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加