穿越Dplyr:首先看一下新的Tidyverse函数



按列分析数据是R的一大优势。但是,如果您是Tidyverse用户,并且想要跨多个列运行一个函数,该怎么办? 从dplyr 1.0开始,将为此提供一个新功能:cross()。
让我们来看看。 发布本文时,dplyr 1.0尚未在CRAN上提供。
但是,您可以使用以下命令下载dplyr的开发版本来访问所有新功能: 在此演示中,我将使用一些显示COVID-19传播的数据:USA Facts按日和县划分的美国确诊病例。
如果您想了解更多信息,请访问https:// usafacts.org/visualizations/coronavirus-covid-19-spread-map/并在此处下载CSV文件。只要您将USA Facts归功于任何已发表的作品(如我刚刚所做的那样),就可以通过知识共享许可免费获得USA Facts数据。
我将在dplyr和readr包中加载 请记住,我正在加载dplyr的开发版本;目前尚不适用于CRAN版本。 接下来,我将读入下载的文件(我将文件命名为covid19_cases_by_county.csv;您的名字可能还有其他名称)。
如果我们用头(例)查看数据框结构,我们会看到每个县都是一行,每个日期都是一列。这不是一个整洁的数据集,但确实可以作为使用cross()的一个很好的例子。 沙龙·马克斯(IDG) 初始不整洁的数据帧结构。
接下来,我将在3月和4月仅对纽约州的数据进行子集化,以便于查看结果。我将过滤掉等于NY的州,以及以3或4开头的列名。 ny <-filter(cases,State ==“ NY”)%>%select(County =`County Name`,starts_with(c(“ 3”,“ 4”)))通常,如果我想获得每天,我要么重塑数据,要么使用像janitor这样的包来添加总行。
但是,如果我想要这种格式的单独的摘要数据框,现在可以使用cross()。 那么,cross()是什么?我认为它是“在每一列上一次执行一个功能。”它使您不必一一命名每一列或使用purrr()映射函数来执行此操作。
这是“给我这个数据框中每个数字列的总和”的代码。 daily_totals <-ny%>%summary(cross(is.numeric,sum))cross()的第一个参数应该是数据帧,但是在顶部使用了daily_totals <-ny%>%。 > cross()中的第一个参数是要对其进行操作的列。这需要任何dplyr :: select()语法。我也可以给定范围的列,而不是is。
数字,例如 daily_totals <-ny%>%summary(cross(2:ncol(ny),sum)) daily_totals <-ny%>%summary(cross(starts_with(“ 4”),sum))through()允许使用相似的代码在每列上运行多个函数。例如,如果我想查看每天的最大值和中位数怎么办?如果创建命名函数列表,则可以一次应用列表中的每个函数。 下面是创建带有两个函数的列表中值和最大值的代码。
med是中值(删除所有缺失值);另一个值max表示最大值,再次删除缺失值。 平均数和最大值<-列表(med =〜median(.x,na.rm = TRUE),max =〜max(.x,na.rm = TRUE)请注意,定义每个命名函数都需要〜波浪号。 br> 下面是在四月份的所有列中的列表中运行每个功能的代码: april_median_and_max <-ny%>%summary(cross(starts_with(“ 4”),mid_and_max)))结果:每个日期列现在有两列! ...
一个中位数,另一个最大。 沙龙·马克斯(IDG) 使用具有多个功能的命名列表运行cross()的结果。 那不是最整洁的数据格式,但是我们生活在一个人们有时希望他们感觉更易理解的结构的世界中。
现在,您可以生成这样的基于列的结果,而无需重新调整数据。 有关新的cross()函数的更多信息,请查看Tidyverse博客文章-以及有关将row()与rowwise()逐行使用的第二篇文章。有关R的更多技巧,请访问InfoWorld的R进行更多操作!!

Yorumlar

Bu blogdaki popüler yayınlar

只需50美元即可训练成为一名熟练的Python编码器

DataStax 使 Astra 流媒体服务普遍可用

TypeScript 4.1 Beta带来了模板文字类型