本文主要是介绍第四章:数据操作Ⅰ 第七节:数据拆分与合并,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用数据拆分函数可以选取符合指定条件的数据,同时使用数据合并函数可以将拆分的数据进行再次合并
一、split()函数
split函数用于根据给定条件拆分数据
例如
使用split()函数,依据鸢尾花数据集中的Species种类拆分
> split(iris,iris$Species)
$setosaSepal.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$versicolorSepal.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$virginicaSepal.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
104 6.3 2.9 5.6 1.8 virginica
由于split()函数返回列表,若对返回的列表应用lapply()函数,则可以分别计算不同鸢尾花种属下的Sepal.Length的平均值
> lapply(split(iris$Sepal.Length,iris$Species),mean)
$setosa
[1] 5.006$versicolor
[1] 5.936$virginica
[1] 6.588
二、subset()函数
Subset()与split()函数类似,也用于拆分函数,但它只返回符合条件的数据,不像split()返回带有拆分分组的数据全体
例如:
我们用subset()函数选取鸢尾花数据集种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
同时,我们也可以利用逻辑运算符来添加筛选条件
> 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
15 5.8 4.0 1.2 0.2 setosa
在函数中使用select参数,可以选取或排除指定列
例如:
只选取鸢尾花数据集中Sepal.Width和Species两列
> 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
如果要排除此两列,只需要在列名前加~即可
> 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
三、数据合并
我们使用merge()函数用于依据共同值合并两个数据框,它类似于数据库中的链接操作
例如
我们以下列数据为例子,以name为基准,合并数学和英语成绩
> x<-data.frame(name=c("a","b","c"),math=c(1,2,3))
> y<-data.frame(name=c("c","b","a"),english=c(4,5,6))
> merge(x,y)name math english
1 a 1 6
2 b 2 5
3 c 3 4
虽然name值保存的顺序不同,但是以共同的name值为基准,针对分数实现了很好的合并
使用merge()函数进行合并时,若共同值只在其中一方存在,而另一方无数据时,则相应的被排除在合并结果之外,但若将all设置为True,则缺失的数据会被填充为NA,所有数据行都会出现在结果中
例如
> x<-data.frame(name=c("a","b","c"),math=c(1,2,3))
> y<-data.frame(name=c("c","b","d"),english=c(4,5,6))
> merge(x,y)name math english
1 b 2 5
2 c 3 4> merge(x,y,all=TRUE)name math english
1 a 1 NA
2 b 2 5
3 c 3 4
4 d NA 6
这篇关于第四章:数据操作Ⅰ 第七节:数据拆分与合并的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!