操作数据集与数据对象

面向 SAS 用户的 R

Melinda Higgins, PhD

Research Professor/Senior Biostatistician Emory University

从 car 包加载 Davis 数据集

  • car 包加载 Davis 数据集
  • 查看前 6 行
library(car)
head(Davis)
  sex weight height repwt repht
1   M     77    182    77   180
2   F     58    161    51   159
3   F     53    161    54   158
4   M     68    177    70   175
5   F     59    157    59   155
6   M     76    170    76   165
面向 SAS 用户的 R

sas 数据步 r mutate 添加 bmi 创建 davismod

面向 SAS 用户的 R

sas 数据步 r mutate 添加 bmi 创建 davismod

面向 SAS 用户的 R

sas 数据步 r mutate 添加 bmi 创建 davismod

面向 SAS 用户的 R

计算新变量——体重指数(BMI)

davismod <- Davis %>%
  mutate(bmi = weight / ((height/100))^2)

head(davismod)
  sex weight height repwt repht    bmi
1   M     77    182    77   180 23.245
2   F     58    161    51   159 22.375
3   F     53    161    54   158 20.446
4   M     68    177    70   175 21.705
5   F     59    157    59   155 23.936
6   M     76    170    76   165 26.297
面向 SAS 用户的 R

计算新变量——逻辑运算符

davismod <- davismod %>%
  mutate(diffht = repht - height) %>%
  mutate(difflow = diffht <= -3)

davismod %>%
  head()
  sex weight height repwt repht      bmi diffht difflow
1   M     77    182    77   180 23.24598     -2   FALSE
2   F     58    161    51   159 22.37568     -2   FALSE
3   F     53    161    54   158 20.44674     -3    TRUE
4   M     68    177    70   175 21.70513     -2   FALSE
5   F     59    157    59   155 23.93606     -2   FALSE
6   M     76    170    76   165 26.29758     -5    TRUE
面向 SAS 用户的 R

用 ifelse 重编码

davismod <- davismod %>%
  mutate(bmicat = ifelse(test = bmi < 25, yes = "1. underwt/norm",
                         no = ifelse(bmi < 30, "2. overwt", "3. obese")))

# display rows 15 to 21
davismod %>% slice(15:21)
  sex weight height repwt repht      bmi diffht difflow          bmicat
1   F     52    163    57   160 19.57168     -3    TRUE 1. underwt/norm
2   F     65    166    66   165 23.58833     -1   FALSE 1. underwt/norm
3   M     92    187   101   185 26.30902     -2   FALSE       2. overwt
4   F     62    168    62   165 21.96712     -3    TRUE 1. underwt/norm
5   M     76    197    75   200 19.58309      3   FALSE 1. underwt/norm
6   F     61    175    61   171 19.91837     -4    TRUE 1. underwt/norm
7   M    119    180   124   178 36.72840     -2   FALSE        3. obese
面向 SAS 用户的 R

测试并确认对象类型

davismod %>%
  select(bmi, bmicat) %>%
  head()
       bmi          bmicat
1 23.24598 1. underwt/norm
2 22.37568 1. underwt/norm
3 20.44674 1. underwt/norm
4 21.70513 1. underwt/norm
5 23.93606 1. underwt/norm
6 26.29758       2. overwt
davismod %>%
  pull(bmi) %>%
  is.numeric()
[1] TRUE
davismod %>%
  pull(bmicat) %>%
  is.numeric()
[1] FALSE
面向 SAS 用户的 R

测试并确认对象类型

davismod %>%
  pull(difflow) %>%
  is.vector()
is.data.frame(davismod)
is.matrix(davismod)

 

[1] TRUE
[1] TRUE
[1] FALSE
面向 SAS 用户的 R

转换对象类型——强制类型转换

davismod %>%
  pull(difflow) %>%
  head()
[1] FALSE FALSE TRUE FALSE FALSE TRUE
  • R 中有许多 as.xxx() 函数
  • 用于将一种对象类型强制转换为另一种
  • 将逻辑型转换为数值型
davismod %>%
  pull(difflow) %>%
  as.numeric() %>%
  head()
[1] 0 0 1 0 0 1
面向 SAS 用户的 R

转换对象类型——强制类型转换

davismod %>%
  select(weight, height) %>%
  head(4)
  weight height
1     77    182
2     58    161
3     53    161
4     68    177

转换为矩阵,检查 class()

davismod %>%
  select(weight, height) %>%
  as.matrix() %>%
  class()
[1] "matrix"
面向 SAS 用户的 R

让我们为 abalone 数据集添加新变量

面向 SAS 用户的 R

Preparing Video For Download...