dplyr软件包是R中功能最强大,最受欢迎的软件包之一。该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr软件包来清理和转换数据。这是一个关于数据操作和数据处理的完整教程。
什么是dplyr?
dplyr是一个强大的R软件包,用于处理,清理和汇总非结构化数据。简而言之,它使得R中的数据探索和数据操作变得简单快捷。
dplyr有什么特别之处?
软件包“dplyr”包含许多主要使用的数据操作功能,例如应用过滤器,选择特定列,排序数据,添加或删除列以及聚合数据。这个包的另一个最重要的优点是学习和使用dplyr函数非常容易。也很容易回想起这些功能。例如,filter()用于过滤行。
dplyr与基本R函数
dplyr函数处理速度比基本R函数快。 这是因为dplyr函数是以计算有效的方式编写的。 它们在语法上也更稳定,并且比向量更好地支持数据帧。
SQL查询与dplyr
数十年来人们一直在使用SQL来分析数据。 每个现代数据分析软件如Python,R,SAS等都支持SQL命令。 但SQL从未被设计为执行数据分析。 它专为查询和管理数据而设计。 有许多数据分析操作在SQL失败或使简单的事情困难。 例如,计算多个变量的中位数,将宽格式数据转换为长格式等。而dplyr软件包的设计目的是进行数据分析。
如何安装和加载dplyr软件包dplyr函数的名称类似于SQL命令,如用于选择变量的select(),group_by() - 通过对变量进行分组来组合数据,join() - 将两个数据集合在一起。 还包括inner_join()和left_join()。 它也支持SQL常用的子查询。
要安装dplyr软件包,请键入以下命令。
- install.packages("dplyr")
要加载dplyr包,请在下面输入命令
- library(dplyr)
数据:各国的收入数据
在本教程中,我们使用以下数据,其中包含2002年至2015年各州产生的收入。注意:此数据不包含各州的实际收入数据。
该数据集包含51个观测值(行)和16个变量(列)。 下面显示了数据集前6行的快照。
数据集下载链接(密码:9ny3)
如何加载数据
提交以下代码。 在下面的代码中更改文件路径。
- mydata <- read.csv("D:/datasets/sampledata.csv")
sample_n函数从数据框(或表)中随机选择行。 函数的第二个参数告诉R要选择的行数。
- sample_n(mydata, 3)
实例2:随机选择总行的N%
sample_frac函数随机返回N%的行。 在下面的例子中,它随机返回10%的行。
- sample_frac(mydata, 0.1)
distinct函数用于消除重复行
- x1 <- dplyr::distinct(mydata)
在此数据集中,没有单个重复行,因此返回的行数与mydata中的行数相同。
实例4:基于单个变量删除重复行
.keep_all函数用于保留输出数据框中的所有其他变量。
- x2 <- dplyr::distinct(mydata, Index, .keep_all= TRUE)
在下面的例子中,我们使用两个变量 - Index,Y2010来确定唯一性。
- x3 <- dplyr::distinct(mydata, Index, Y2010, .keep_all= TRUE)
假设你被要求只选择几个变量。 下面的代码选择变量“Index”,从“State”到“Y2008”的列。
- mydata2 <- select(mydata, Index, State:Y2008)
变量前面的减号表示R放弃变量。
- mydata3 <- select(mydata, -Index, -State)
上面的代码也可以写成:
- mydata4 <- select(mydata, -c(Index, State))
starts_with()函数用于选择以字母开头的变量。
- mydata5 <- select(mydata, starts_with('Y'))
在starts_with()之前添加一个负号表示将删除以’Y’开始的变量
- mydata6 <- select(mydata, -starts_with('Y'))
以下函数可帮助您根据名称选择变量。
实例9:选择变量名中包含”l”的变量
- mydata7 <- select(mydata, contains('l'))
下面的代码保持变量’State’在前面,其余的变量跟随其后。
- mydata8 <- select(mydata, State, everything())
rename函数可用于重命名变量。
在下面的代码中,我们将’Index’变量重命名为’Index1’。
- mydata9 <- rename(mydata, Index1=Index)
- names(mydata9)
假设你需要子集数据。 您想过滤行并仅保留Index等于A的那些值。
- mydata10 <- filter(mydata, Index == "A")
%in%运算符可用于选择多个项目。 在下面的程序中,我们告诉R选择Index列中的’A’和’C’行。
- mydata11 <- filter(mydata, Index %in% c("A", "C"))
假设你需要应用’AND’条件。 在这种情况下,我们在“索引”栏中选择’A’和’C’的数据,并在2002年收入超过130万美元。
- mydata12 <- filter(mydata, Index %in% c("A", "C") & Y2002 >= 1300000 )
‘|’表示逻辑条件中的或。 它意味着这两个条件中的任何一个。
- mydata13 <- filter(mydata, Index %in% c("A", "C") | Y2002 >= 1300000)
“!” 符号用于反转逻辑条件。
- mydata13 <- filter(mydata, !Index %in% c("A", "C"))
grepl函数用于搜索模式匹配。 在下面的代码中,我们正在查找state列包含“Ar”的记录。
- mydata14 <- filter(mydata, grepl("Ar", State))
在下面的例子中,我们计算了变量Y2015的平均值和中位数。
- summarise(mydata, Y2015_mean = mean(Y2015), Y2015_med=median(Y2015))
在下面的例子中,我们计算了记录的数量,变量Y2005和Y2006的平均值和中位数。 summarise_at函数允许我们通过名称选择多个变量。
- summarise_at(mydata, vars(Y2005, Y2006), funs(n(), mean, median))
我们也可以在汇总功能中使用自定义函数。 在这种情况下,我们计算记录数,缺失值的数量,变量Y2011和Y2012的平均数和中位数。 点(.)表示函数的第二个参数中指定的每个变量。
- summarise_at(mydata, vars(Y2011, Y2012),
- funs(n(), missing = sum(is.na(.)),
- mean(., na.rm = TRUE),
- median(.,na.rm = TRUE)))
summarise_if函数允许您有条件地总结。
- summarise_if(mydata, is.numeric, funs(n(),mean,median))
或者
- numdata <- mydata[sapply(mydata,is.numeric)]
- summarise_all(numdata, funs(n(),mean,median))
我们正在检查分类(因子)变量中的级别/类别数量和缺失观察数量。
- summarise_all(mydata["Index"], funs(nlevels(.), nmiss=sum(is.na(.))))
arrange()函数的默认排序顺序是递增的。 在这个例子中,我们通过多个变量来排序数据。
- arrange(mydata, Index, Y2011)
假设你需要按降序对其中一个变量进行排序,而对其他变量则按升序排序。
- arrange(mydata, desc(Index), Y2011)
我们通过变量Index计算变量Y2011和Y2012的变量的计数和均值。
- t <- summarise_at(group_by(mydata, Index), vars(Y2011, Y2012), funs(n(), mean(., na.rm = TRUE)))
或者
- t <- mydata %>% group_by(Index) %>%
- summarise_at(vars(Y2011:Y2015), funs(n(), mean(., na.rm = TRUE)))
假设您需要从“A”,“C”和“I”类别的变量索引中抽取前两行。
- t <- mydata %>% filter(Index %in% c("A", "C","I")) %>% group_by(Index) %>%
- do(head( . , 2))
我们正在通过变量Index计算变量Y2015的第三个最大值。 以下代码首先仅选择两个变量Index和Y2015。 然后它用’A’,’C’和’I’过滤变量索引,然后对变量进行分组,然后按降序对变量Y2015进行排序。 最后,它选择第三行。
- t <- mydata %>%
- select(Index, Y2015) %>%
- filter(Index %in% c("A", "C","I")) %>%
- group_by(Index) %>%
- do(arrange(.,desc(Y2015))) %>%
- slice(3)
像SQL一样,dplyr使用窗口函数来将数据分组。 它返回值的向量。 我们可以使用min_rank()函数来计算上例中的rank,
- t <- mydata %>% select(Index, Y2015) %>%
- filter(Index %in% c("A", "C","I")) %>%
- group_by(Index) %>%
- filter(min_rank(desc(Y2015)) == 3)
在这种情况下,我们通过变量Index来计算变量Y2014和Y2015的均值。 然后通过计算的变量Y2015的均值对结果进行排序。
- t <- mydata %>%
- group_by(Index)%>%
- summarise(Mean_2014 = mean(Y2014, na.rm=TRUE),
- Mean_2015 = mean(Y2015, na.rm=TRUE)) %>%
- arrange(desc(Mean_2015))
以下代码用变量Y2015除以Y2014的的值其命名为“change”。
- mydata15 <- mutate(mydata, change=Y2015/Y2014)
它创建新的变量并用后缀“_new”命名。
- mydata11 <- mutate_all(mydata, funs("new" = .* 1000))
假设您需要计算变量Y2008至Y2010的排名。
- mydata17 <- mutate_at(mydata, vars(Y2008:Y2010), funs(Rank=min_rank(.)))
您在阅读中,有什么见解,请评论。
链接:https://www.listendata.com/2016/08/dplyr-tutorial.html
- 本文固定链接: https://maimengkong.com/learn/788.html
- 转载请注明: : 萌小白 2021年10月16日 于 卖萌控的博客 发表
- 百度已收录