R什么&x27;转换多个变量的最佳方法是什么?

R什么&x27;转换多个变量的最佳方法是什么?,r,transformation,R,Transformation,我一直在为我的数据转换变量,可能比我应该做的要困难一些。转换批处理变量的更有效方法是什么?例如: 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_ms

我一直在为我的数据转换变量,可能比我应该做的要困难一些。转换批处理变量的更有效方法是什么?例如:

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)
log\u vw=log(msft$vwrett)
log_ew=log(msft$ewretd)
log_sp=log(msft$sprtrn)
log_msft=log(msft$msft)

msft[“log_vw”]谢谢@dayne和@thelatemail。这正是我需要的。多谢各位

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

cols如果你是
dplyr
的粉丝,你也可以

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

这是一个带有
数据表的选项。将'data.frame'转换为'data.table'(
setDT(msft)
),在
.SDcols
中指定'cols',在data.table的子集上循环(
.SD
),获取
日志
,并将输出分配到新列(
paste0(“log”),cols)

库(data.table)

cols Yep@dayne是对的,请尝试类似于我现在正在安装dplyr的
cols。感谢您的指导。
mutate\u每个
都将被弃用。改用
mutate\u all
mutate\u at
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
library(data.table)
cols <- c("vwretd","ewretd","sprtrn","msft")
setDT(msft)[, paste0("log_", cols) := lapply(.SD, log), .SDcols = cols]