一、安装和加载R包
本白刚好前一阵子装过dplyr这个包,而且除了一些一问题。就是加载的时候出现如下报错。
查了半天发现是这个原因:“R语言调用函数时,若有两个同名函数, 在查找到第一个的时候查找停止并进行调用。于是出现了上述报错。”
解决办法是输入命令
dplyr::filter
dplyr::lag
dplyr::intersect
dplyr::setdiff
dplyr::setequal
dplyr:: union
再重新输入library(dplyr)
就没再报错了。算是个小经验吧。
二、一些dplyr包里的函数(命令)
先建一个新的小一些的数据框吧。
test <- iris[c(1:2,51:52,101:102),]
意思是把iris数据框里的第1,2行,第51,52行,第101,102行的数据赋值给test这个新的数据框。
1.增加列的命令 mutate()
mutate(test, Area= Sepal.Length * Sepal.Width) 是增加一列Area 为每行里面Sepal.Length和Sepal.Width相乘的数字。
2.选择列的命令select()
这个和昨天学的直接提取数据框里的某一列的元素是有差别的。比如都是想看第二列的数据。用select命令就更全面好看一些。
但是如果提取多列,输入似乎一样。感觉单列数据被歧视了啊。
除了可以用列的序列号之外,还可以用列的名称,比如select(test, Sepal.Length)
还可以用这个函数产生新的数据框newtest<-select(test, 1)
筛选行filter()
filter(test, Species == "setosa")
是筛选出Species为setosa的所有行。这个命令也可以新产生子数据框,和select()类似。
filter(test, Species %in% c("setosa","versicolor"))
是筛选出Species为setosa或versicolor的所有行。
filter(test, Species == "setosa"&Sepal.Length > 5 )
是筛选出Species为setosa和Sepal.Length大于5的行。对数据框排序Arrange()
arrange(test, Sepal.Length)
按照Sepal.Length的数值从小到大排列
arrange(test, desc(Sepal.Length))
按照Sepal.Length的数值从大到小排列汇总summarise() 可以实现统计功能
summarise(test, mean(Sepal.Length), sd(Sepal.Length))
根据test里的数据,计算Sepal.Length的平均数和标准差
summarise(group_by(test, Species),mean(Sepal.Length),
sd(Sepal.Length))按照Species分类后,分别计算平均数和标准差。
- count(test,Species)可实现计数功能
对Species的数量进行计数
三、管道功能
-
tidyverse是一个连贯的数据包操作系统。大概是包含了很多数据统计计算用的包吧。
- 管道运算符 %>%,也可以叫做管道函数
“其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。” “将%>%左边的对象传递给右边的函数,作为第一个选项的设置(或剩下唯一一个选项的设置)”。对管道的理解还不怎么清晰啊。。
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
意思是把test的数据按照Species进行分组,然后对每组进行统计Sepal.Length的平均数和方差。似乎比一步一步单独计算要节省时间和内存。
四、dplyr处理关系数据
在学习管道概念的时候看到,dplyr这个包的作用有二:数据转换和处理数据关系。
- data.frame()函数用来从向量产生数据框
test1 <- data.frame(x = c('b','e','f','x'),
z = c("A","B","C",'D'),
stringsAsFactors = F)
test2 <- data.frame(x = c('a','b','c','d','e','f'),
y = c(1,2,3,4,5,6),
stringsAsFactors = F)
这是产生了test1和test2两个数据框
2.inner_join(test1, test2, by = "x")
内部连接:取test1和test2两个数据框的交集
-
left_join(test1, test2, by = 'x')
和left_join(test2, test1, by = 'x')
两个命令结果是不同的。分别以左侧的数据框为基础,进行连接
4.full_join( test1, test2, by = 'x')
全部数据都用上 -
semi_join(x = test1, y = test2, by = 'x')
半连接,意思是把x表里的数据和y去找能匹配上的。
6.anti_join(x = test2, y = test1, by = 'x')
反连接,正好相反,把x表里的数据去和y比对,找不能匹配上的。 - bind_rows()和bind_cols()两个函数用于简单合并。 bind_rows()是合并行,要求列数必须一致,才能合并的了。bind_cols()是合并列,则要行数一致才行。