R的数据结构
1、向量vector
2、矩阵matrix
3、数组array
4、数据框 dataframe
5、列表
R的数据结构
数据框 data.frame
简化数据框的批量操作
## attach/detach
> data <- (head(mtcars))[1:3]
> data
mpg cyl disp
Mazda RX4 21.0 6 160
Mazda RX4 Wag 21.0 6 160
Datsun 710 22.8 4 108
Hornet 4 Drive 21.4 6 258
Hornet Sportabout 18.7 8 360
Valiant 18.1 6 225
> data$mpg+data$cyl+data$disp
[1] 187.0 187.0 134.8 285.4 386.7 249.1
> attach(data)
> mpg+cyl+disp
[1] 187.0 187.0 134.8 285.4 386.7 249.1
> detach(data)
##简单来说就是attach将data fix住了,后续需要写dataname的地方都可以省略,代码就会简单一些;但是用完这个命令需要及时deatch data,释放数据。
## with
> data$mpg+data$cyl+data$disp
[1] 187.0 187.0 134.8 285.4 386.7 249.1
> with(data,{
+ mpg+cyl+disp
+ })
[1] 187.0 187.0 134.8 285.4 386.7 249.1
##如果需要赋值的话,需要这样写才可以
with(data,{
+ a <<- mpg+cyl+disp
+ })
添加列
##within函数
> data <- within(data,{
+ sum=mpg+cyl+disp
+ mean=(mpg+cyl+disp)/3
+ })
> data
mpg cyl disp mean sum
Mazda RX4 21.0 6 160 62.33333 187.0
Mazda RX4 Wag 21.0 6 160 62.33333 187.0
Datsun 710 22.8 4 108 44.93333 134.8
Hornet 4 Drive 21.4 6 258 95.13333 285.4
Hornet Sportabout 18.7 8 360 128.90000 386.7
Valiant 18.1 6 225 83.03333 249.1
##transform函数
> data
mpg cyl disp
Mazda RX4 21.0 6 160
Mazda RX4 Wag 21.0 6 160
Datsun 710 22.8 4 108
Hornet 4 Drive 21.4 6 258
Hornet Sportabout 18.7 8 360
Valiant 18.1 6 225
> test <- transform(data,s=mpg+cyl+disp,m=(mpg+cyl+disp)/3)
> test
mpg cyl disp s m
Mazda RX4 21.0 6 160 187.0 62.33333
Mazda RX4 Wag 21.0 6 160 187.0 62.33333
Datsun 710 22.8 4 108 134.8 44.93333
Hornet 4 Drive 21.4 6 258 285.4 95.13333
Hornet Sportabout 18.7 8 360 386.7 128.90000
Valiant 18.1 6 225 249.1 83.03333
##mutate函数
> library(dplyr)
> data
mpg cyl disp
Mazda RX4 21.0 6 160
Mazda RX4 Wag 21.0 6 160
Datsun 710 22.8 4 108
Hornet 4 Drive 21.4 6 258
Hornet Sportabout 18.7 8 360
Valiant 18.1 6 225
> test <- mutate(data,sum=mpg+cyl+disp)
> test
mpg cyl disp sum
1 21.0 6 160 187.0
2 21.0 6 160 187.0
3 22.8 4 108 134.8
4 21.4 6 258 285.4
5 18.7 8 360 386.7
6 18.1 6 225 249.1
##transform和mutate的区别在于,transform不可以直接调用新建的变量,而mutate和within可以,例子如下:
> test <- transform(data,sum=mpg+cyl+disp,average=sum/3)
Error in sum/3 : non-numeric argument to binary operator
> test <- mutate(data,sum=mpg+cyl+disp,average=sum/3)
> test
mpg cyl disp sum average
1 21.0 6 160 187.0 62.33333
2 21.0 6 160 187.0 62.33333
3 22.8 4 108 134.8 44.93333
4 21.4 6 258 285.4 95.13333
5 18.7 8 360 386.7 128.90000
6 18.1 6 225 249.1 83.03333
所以,学好mutate就够了,但要注意使用前要先加载包
网友评论