2017-07-11 15 views
0

特定の文字列コードを含む特定の列を同じdata.frameの要素に変換したいとします。しかし、私はdata.frameカラム参照を自分の関数に渡すという初期の仕事に苦しんでいます。例hereとそのリンクされたページからの作業、私は次のように動作するはずと信じて:R関数を使用して、文字列を同じデータフレーム内の因子として置き換えます。

#feed string to function 

set.seed(42) 
df <- data.frame(
chr1 = sample(letters[1:4], 10, T), 
chr2 = sample(letters[4:7], 10, T), 
stringsAsFactors = F 
) 

tofactor <- function(dat,column) { 
    dat[,column] <- as.factor(dat[,column]) 
} 

tofactor(df, "chr1") 
typeof(df$chr1) 

しかし、この操作の結果は、df$chr1のための文字列エンコーディングの持続性です。私はまた、二重角括弧のアプローチを使用して成功を収めずに参照を試みました。

ご協力いただきありがとうございます。

+0

「dat」を関数の最後の行に追加してください。 – rawr

+0

前の投稿が間違っています。あなたの機能は正常です。あなたの問題は、 'tofactor'関数の結果を何にも割り当てないということです。 'df $ chr1 < - tofactor(df、" chr1 ")'を使ってください。また、 'data.frame()'の呼び出しの中で '='を使用し、 '< - 'を使用しないでください。 – cmaher

+2

前のポスターのアドバイスは愚かです。私の方法は良いです – rawr

答えて

0

もう一つの方法は、mutate_atを使用してvarの内部変数を指定することですがスコープはより良い方向にこのソリューションは、追加のステップで出力を割り当てることなく、繰り返し使用できる機能で置き換えを、扱う

set.seed(42) 
df <- data.frame(
    chr1 = sample(letters[1:4], 10, T), 
    chr2 = sample(letters[4:7], 10, T), 
    stringsAsFactors = F 
) 

tofactor <- function(dat,column) { 
    dat[,column] <- as.factor(dat[,column]) 
    assign("df",dat, envir = .GlobalEnv) 
} 

tofactor(df, "chr1") 
typeof(df$chr1) 

:同僚からのは、私がで到着しました。

0

機能は正常に動作しています。出力をオリジナル(または新しいdf)に割り当てるだけです。

df <- tofactor(df, "chr1")

あなたがstr(tofactor(df,"chr1"))を実行する場合は、戻り値を取得:理解した後

library(dplyr) 

df <- data.frame(
    chr1 = sample(letters[1:4], 10, T), 
    chr2 = sample(letters[4:7], 10, T), 
    stringsAsFactors = F 
) 

df2 <- df %>% 
mutate_at(vars(chr1), as.factor) 

class(df2$chr1) #[1] "factor" 
0

Factor w/ 4 levels "a","b","c","d": 4 4 2 4 3 3 3 1 3 3

関連する問題