R向量化操作(Data Transformations)

 Data Transformations

split(x, f, drop = FALSE, …),x是待划分的向量或数据框,f是定义了组关系的因子变量。

library(MASS)
g <- split(Cars93$MPG.city, Cars93$Origin)
class(g)
## [1] "list"
names(g)
## [1] "USA"     "non-USA"
c(median(g[[1]]), median(g[[2]]))
## [1] 20 22

lapply(lst, fun)sapply(lst, fun),前者返回一个列表,后者优先返回向量,sapply里的s表示simplify。

Lst <- list(a = rnorm(100), b = rnorm(100), c = rnorm(100))
lapply(Lst, range)
## $a
## [1] -2.859  2.976
## 
## $b
## [1] -1.961  2.906
## 
## $c
## [1] -2.403  3.363
sapply(Lst, range)
##           a      b      c
## [1,] -2.859 -1.961 -2.403
## [2,]  2.976  2.906  3.363

对矩阵或数据框的行或列应用函数

  1. 对矩阵行apply(mat, 1, fun)
  2. 对矩阵列apply(mat, 2, fun)
  3. 由于data frame是由其列为元素的列表,所以有lapply(dfrm, fun)sapply(dfrm, fun)
  4. 假设resp是响应变量(response variable),pred是一个数据框,每列为一个predictor。cors <- sapply(pred, cor, y = resp)会计算pred的每列和y的相关系数。
resp <- rnorm(n = 10, mean = 0, sd = 1)
pred <- as.data.frame(matrix(rnorm(n = 10 * 100, mean = 0, sd = 1), 10, 100))
cors <- sapply(pred, cor, y = resp)
mask <- (rank(-abs(cors)) <= 10)  #函数rank给出从小到大的排序
best.pred <- pred[, mask]
sapply(Cars93, class)
##       Manufacturer              Model               Type 
##           "factor"           "factor"           "factor" 
##          Min.Price              Price          Max.Price 
##          "numeric"          "numeric"          "numeric" 
##           MPG.city        MPG.highway            AirBags 
##          "integer"          "integer"           "factor" 
##         DriveTrain          Cylinders         EngineSize 
##           "factor"           "factor"          "numeric" 
##         Horsepower                RPM       Rev.per.mile 
##          "integer"          "integer"          "integer" 
##    Man.trans.avail Fuel.tank.capacity         Passengers 
##           "factor"          "numeric"          "integer" 
##             Length          Wheelbase              Width 
##          "integer"          "integer"          "integer" 
##        Turn.circle     Rear.seat.room       Luggage.room 
##          "integer"          "numeric"          "integer" 
##             Weight             Origin               Make 
##          "integer"           "factor"           "factor"

tapply:对数据向量按因子分组应用函数

对数据框的行按因子分组应用函数,by(dfrm, fact, fun)

非向量化函数的向量化,mapply(f, vec1, vec2, …, vecN),f有N个参数。

mapply(rep, 1:4, 4:1)
## [[1]]
## [1] 1 1 1 1
## 
## [[2]]
## [1] 2 2 2
## 
## [[3]]
## [1] 3 3
## 
## [[4]]
## [1] 4
mapply(rep, times = 1:4, x = 4:1)
## [[1]]
## [1] 4
## 
## [[2]]
## [1] 3 3
## 
## [[3]]
## [1] 2 2 2
## 
## [[4]]
## [1] 1 1 1 1
gcd <- function(a, b) {
    if (b == 0) 
        return(a) else return(gcd(b, a%%b))
}
mapply(gcd, c(1, 2, 3), c(9, 6, 3))
## [1] 1 2 3

参考文献

R cookbook 第六章

转载于:https://www.cnblogs.com/stat-cchen/archive/2013/02/19/2917235.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值