2016-07-27 3 views
2

私のデータの変数を変えることは、おそらくもっと難しいでしょう。バッチ変数をより効率的に変換する方法は何ですか?たとえば:R複数の変数を変換する最も良い方法は何ですか?

log_vw = log(msft$vwretd) 
log_ew = log(msft$ewretd) 
log_sp = log(msft$sprtrn) 
log_msft = log(msft$msft) 

msft["log_vw"] <- log_vw 
msft["log_ew"] <- log_ew 
msft["log_sp"] <- log_sp 
msft["log_msft"] <- log_msft 
head(msft) 

...この最後の例では

cols <- c("msft$vwretd","msft$ewretd","msft$sprtrn","msft$msft") 
df[cols] <- log(cols) 

を私は、このメソッドを使用して試してみたが、私は道に沿っていくつかのエラーを受け取り、私は非数値の引数を置くしようとしていますそれは理にかなっています。

私はを理解していますが、私のコマンドを構造化する方法は不明です。

推奨事項があります。ありがとう。

+2

'lapply' – dayne

+1

うんの@dayneが正しいを見て、' colsの<ような何かしてみてください - C( "vwretd"、 "ewretd"、 "sprtrn"、 "MSFT")を、 msft [cols] < - lapply(msft [cols]、log) ' – thelatemail

答えて

3

dplyr::mutate_each(msft, funs(log), 
        log_vw = vwretd, 
        log_ew = ewretd, 
        log_sp = sprtrn, 
        log_msft = msft) 

出力:ここ

library(dplyr) 

data.frame(vwretd = runif(10), ewretd = runif(10), sprtrn = runif(10), msft = runif(10)) %>% 
    mutate_each(funs(log), log_vw = vwretd, log_ew = ewretd, log_sp = sprtrn, log_msft = msft) 

     vwretd ewretd  sprtrn  msft  log_vw  log_ew  log_sp log_msft 
1 0.54274693 0.1263857 0.88601706 0.458666312 -0.6111121 -2.06841664 -0.1210191 -0.7794323 
2 0.44335175 0.5799405 0.05000435 0.004620247 -0.8133918 -0.54482978 -2.9956452 -5.3773070 
3 0.10626751 0.6079891 0.77995001 0.474660813 -2.2417957 -0.49759827 -0.2485255 -0.7451548 
4 0.56562366 0.7637879 0.03525097 0.199729556 -0.5698263 -0.26946509 -3.3452623 -1.6107910 
5 0.39274678 0.7384458 0.62834120 0.888230976 -0.9345902 -0.30320757 -0.4646719 -0.1185235 
6 0.04751128 0.5708233 0.53730398 0.425984998 -3.0467881 -0.56067550 -0.6211913 -0.8533511 
7 0.57159055 0.9290444 0.31881544 0.679257606 -0.5593324 -0.07359875 -1.1431429 -0.3867548 
8 0.10841133 0.9730511 0.26677617 0.097040692 -2.2218227 -0.02731870 -1.3213453 -2.3326249 
9 0.17500813 0.3787455 0.14860983 0.480663703 -1.7429229 -0.97089076 -1.9064310 -0.7325874 
10 0.89509921 0.4091091 0.79529002 0.681128521 -0.1108207 -0.89377335 -0.2290484 -0.3840043 
+0

今私はdplyrをインストールしています。ガイダンスをありがとう。 – Starbucks

+2

'mutate_each'は廃止予定です。代わりに 'mutate_all'または' mutate_at'を使用してください – Sumedh

+0

興味深い。通知ありがとう! –

0

@ dayneと@thelatemailありがとうございました。これは私が必要とするものです。ありがとうございました。あなたがdplyrのファンなら、あなたも行うことができ

cols <- c("vwretd","ewretd","sprtrn","msft") 
msft[cols] <- lapply(msft[cols], log) 
0

data.tableとオプションです。 'data.frame'を 'data.table'(setDT(msft))に変換し、.SDcolsに 'cols'を指定し、Data.table(.SD)のサブセットをループし、logを取得して、出力を新しいファイルに割り当てます(:=)。列(paste0("log_",cols))。

library(data.table) 
cols <- c("vwretd","ewretd","sprtrn","msft") 
setDT(msft)[, paste0("log_", cols) := lapply(.SD, log), .SDcols = cols] 
関連する問題