R语言数据拆分

博主的话❤️:

大家好✨,这里是bio。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天是南方的小年,祝福大家小年快乐。


目录

  • 博主的话❤️:
  • 前言
  • 一、split()函数
  • 二、subset()函数
  • 总结


前言

今天继续学习R语言,我们之前已经介绍过了数据合并(R语言合并数据框的行与列),现在来介绍数据的拆分。数据拆分主要使用两个函数分别是split()和subset()函数。


一、split()函数

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, setosaversicolor,$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()函数返回符合条件的数据。

#返回向量、矩阵、数据框中符合条件的部分
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
...

总结

以上就是今天要讲的内容,看到这里的小伙伴给大恐龙点点赞,点点关注!平时要多加练习,有问题可以留言交流哦!

你可能感兴趣的:(R语言学习笔记,r语言,开发语言,机器学习)