大家好✨,这里是bio。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天是南方的小年,祝福大家小年快乐。
今天继续学习R语言,我们之前已经介绍过了数据合并(R语言合并数据框的行与列),现在来介绍数据的拆分。数据拆分主要使用两个函数分别是split()和subset()函数。
split()函数用于根据给定条件拆分数据。
#根据给定条件拆分数据,返回保存拆分数据的列表
split(
x #要拆分的向量或数据框
f #保存拆分基准的因子
)
再次用我们的老朋友鸢尾花数据集作为例子:
split(iris,iris$Species)
$setosa
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
...
$versicolor
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
51 7.0 3.2 4.7 1.4 versicolor
52 6.4 3.2 4.5 1.5 versicolor
53 6.9 3.1 4.9 1.5 versicolor
...
$virginica
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
101 6.3 3.3 6.0 2.5 virginica
102 5.8 2.7 5.1 1.9 virginica
103 7.1 3.0 5.9 2.1 virginica
...
可以看到整个列表被分成了三部分,分别是 s e t o s a , setosa, setosa,versicolor,$virginica。
如果需要对不同品种计算Sepal.Length的均值。可以使用apply()系列函数中的lapply()函数(R语言apply系列函数)。
lapply()函数:
lapply(split(iris$Sepal.Length,iris$Species),mean)
$setosa
[1] 5.006
$versicolor
[1] 5.936
$virginica
[1] 6.588
tapply()函数:
tapply(iris$Sepal.Length,iris$Species,mean)
setosa versicolor virginica
5.006 5.936 6.588
subset()函数返回符合条件的数据。
#返回向量、矩阵、数据框中符合条件的部分
subset(
x #对象
subset #是否要选取数据
)
subset(
x
subset
select #为数据框时,该参数为要选取的列
)
例如从鸢尾花数据集中选取setosa品种的鸢尾花数据:
subset(iris,Species == "setosa")
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
...
当条件较多时,可以使用and等运算符,例如:
subset(iris,Species == "setosa" & Sepal.Length > 5.0)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
11 5.4 3.7 1.5 0.2 setosa
...
selec参数可以选取或者排除特定列。例如:
#选取特定列
subset(iris,select = c(Sepal.Length,Species))
Sepal.Length Species
1 5.1 setosa
2 4.9 setosa
3 4.7 setosa
4 4.6 setosa
5 5.0 setosa
...
#排除特定列
subset(iris,select = -c(Sepal.Length,Species)) #添加减号“-”
Sepal.Width Petal.Length Petal.Width
1 3.5 1.4 0.2
2 3.0 1.4 0.2
3 3.2 1.3 0.2
4 3.1 1.5 0.2
5 3.6 1.4 0.2
...
以上就是今天要讲的内容,看到这里的小伙伴给大恐龙点点赞,点点关注!平时要多加练习,有问题可以留言交流哦!