Questions tagged «dplyr»

使用此标记可以解决与dplyr软件包中的功能有关的问题,例如group_by,摘要,过滤和选择。

3
data.table vs dplyr:一个人可以做得很好,另一个人不能做得不好吗?
总览 我相对熟悉data.table,而不是那么熟悉dplyr。我已经阅读了一些出现在SO上的dplyr插图和示例,到目前为止,我的结论是: data.table且dplyr速度可比,除非有很多(即> 10-100K)组,并且在某些其他情况下(请参见下面的基准) dplyr 具有更多可访问的语法 dplyr 抽象(或将)潜在的数据库交互 功能上有一些细微的差异(请参见下面的“示例/用法”) 我认为2.不太重要,因为我相当熟悉它data.table,尽管我知道这对新手和老手来说都是一个很大的因素。我想避免争论哪个更直观,因为从我已经熟悉的人的角度来看,这与我提出的具体问题无关data.table。我还想避免讨论“更直观”如何导致更快的分析(当然是正确的,但又不是我对此最感兴趣的内容)。 题 我想知道的是: 对于熟悉软件包的人来说,是否有分析任务更容易用一个或另一个软件包编写代码(即,要求的击键与要求的深奥程度的某种组合,每个击键都是一件好事)。 在一个程序包中,是否有比其他程序更有效地执行分析任务(即大于2倍)? 最近的一个SO问题使我对这个问题进行了更多的思考,因为到那时为止,我认为dplyr提供的功能超出了我已经可以做得到的范围data.table。这是dplyr解决方案(Q末的数据): dat %.% group_by(name, job) %.% filter(job != "Boss" | year == min(year)) %.% mutate(cumu_job2 = cumsum(job2)) 这比我尝试破解data.table解决方案要好得多。也就是说,好的data.table解决方案也相当不错(感谢Jean-Robert,Arun,并请注意,在这里,我赞成使用单一语句而不是严格的最佳解决方案): setDT(dat)[, .SD[job != "Boss" | year == min(year)][, cumjob := cumsum(job2)], by=list(id, job) ] 后者的语法可能看起来很深奥,但是如果您习惯了data.table(例如,不使用一些更深奥的技巧),它实际上非常简单。 理想情况下,我希望看到的是一些很好的示例,它们的方式dplyr或data.table方法实质上更简洁,或性能更好。 例子 用法 …
758 r  data.table  dplyr 

5
显示/打印小标题的所有行(tbl_df)
tibble(以前是tbl_df)由R中的dplyr数据帧操作包创建的数据帧的版本。它防止在意外调用数据帧时产生长表输出。 用tibble/ 包裹数据框后tbl_df,是否有命令查看整个数据框(数据框的所有行和列)? 如果使用df[1:100,],我将看到全部100行,但是如果使用df[1:101,],它将仅显示前10行。我想轻松显示所有行以快速滚动它们。 是否有dplyr命令来抵消此问题或解包数据帧的方法?
192 r  dplyr  options  display 

4
筛选包含特定字符串的行
我必须使用包含字符串的那些行作为标准来过滤数据帧RTB。 我正在使用dplyr。 d.del <- df %.% group_by(TrackingPixel) %.% summarise(MonthDelivery = as.integer(sum(Revenue))) %.% arrange(desc(MonthDelivery)) 我知道我可以在其中使用该函数filter,dplyr但我不完全知道如何告诉它检查字符串的内容。 我尤其要检查列中的内容TrackingPixel。如果字符串包含标签,RTB我想从结果中删除该行。
188 r  filter  dplyr 

5
dplyr包可以用于条件突变吗?
当突变是有条件的(取决于某些列值的值)时,可以使用突变吗? 这个例子有助于说明我的意思。 structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4, 2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4, 5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, …

7
提取dplyr tbl列作为向量
是否有更简洁的方法从带有数据库后端的tbl中获取dplyr tbl的一列作为向量(即,数据帧/表不能直接成为子集)? require(dplyr) db <- src_sqlite(tempfile(), create = TRUE) iris2 <- copy_to(db, iris) iris2$Species # NULL 那太容易了,所以 collect(select(iris2, Species))[, 1] # [1] "setosa" "setosa" "setosa" "setosa" etc. 但是似乎有点笨拙。

8
修复了多个警告“未知列”
对于所有类型的命令(例如,在软件包上安装更新的str(x)),我都会持续发出“未知列”的多次警告,并且不确定如何调试或修复它。 警告“未知列”显然与我重命名的tbl_df中的变量有关,但是警告似乎出现在与tbl_df不相关的所有命令中(例如,在x为x的软件包str(x)上安装更新)只是一个字符向量)。
169 r  dplyr 

8
在`dplyr`中使用动态变量名
我想用来dplyr::mutate()在数据框中创建多个新列。列名及其内容应动态生成。 来自虹膜的示例数据: library(dplyr) iris <- tbl_df(iris) 我创建了一个函数来从Petal.Width变量中更改新列: multipetal <- function(df, n) { varname <- paste("petal", n , sep=".") df <- mutate(df, varname = Petal.Width * n) ## problem arises here df } 现在,我创建一个循环来构建我的列: for(i in 2:5) { iris <- multipetal(df=iris, n=i) } 但是,由于mutate认为varname是一个文字变量名,因此循环仅创建一个新变量(称为varname),而不是四个(称为花瓣2-花瓣5)。 如何mutate()使用动态名称作为变量名称?
168 r  dplyr  r-faq 

9
使用字符串向量输入按dplyr中的多列分组
我试图将我对plyr的理解转换为dplyr,但是我不知道如何按多个列进行分组。 # make data with weird column names that can't be hard coded data = data.frame( asihckhdoydkhxiydfgfTgdsx = sample(LETTERS[1:3], 100, replace=TRUE), a30mvxigxkghc5cdsvxvyv0ja = sample(LETTERS[1:3], 100, replace=TRUE), value = rnorm(100) ) # get the columns we want to average within columns = names(data)[-3] # plyr - works ddply(data, columns, summarize, value=mean(value)) …
157 r  dplyr  r-faq 

7
dplyr的相对频率/比例
假设我要计算每个组中不同值的比例。例如,使用mtcars数据,我如何一目了然地通过am(自动/手动)计算齿轮数的相对频率?dplyr library(dplyr) data(mtcars) mtcars <- tbl_df(mtcars) # count frequency mtcars %>% group_by(am, gear) %>% summarise(n = n()) # am gear n # 0 3 15 # 0 4 4 # 1 4 8 # 1 5 5 我想实现的目标: am gear n rel.freq 0 3 15 0.7894737 0 4 4 0.2105263 …
153 r  group-by  dplyr  frequency 

9
从分组数据中选择第一行和最后一行
题 使用dplyr,如何在一个语句中选择分组数据的顶部和底部观察/行? 数据与示例 给定数据框 df <- data.frame(id=c(1,1,1,2,2,2,3,3,3), stopId=c("a","b","c","a","b","c","a","b","c"), stopSequence=c(1,2,3,3,1,4,3,1,2)) 我可以使用slice,但使用两个单独的语句从每个组中获得最高和最低观察值: firstStop <- df %>% group_by(id) %>% arrange(stopSequence) %>% slice(1) %>% ungroup lastStop <- df %>% group_by(id) %>% arrange(stopSequence) %>% slice(n()) %>% ungroup 我可以将这两个statmenets合并成一个选择两个顶部和底部的意见?
137 r  dplyr 

6
使用dplyr删除重复的行
我有一个这样的data.frame- set.seed(123) df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10) > df x y z 1 0 1 1 2 1 0 2 3 0 1 3 4 1 1 4 5 1 0 5 6 0 1 6 7 1 0 7 8 1 0 8 9 1 0 9 10 0 1 10 …
128 r  dplyr 

6
使用dplyr将函数应用于表的每一行?
与plyr我一起工作时,我经常发现将它用于adply必须应用于每一行的标量函数很有用。 例如 data(iris) library(plyr) head( adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length)) ) Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len 1 5.1 3.5 1.4 0.2 setosa 5.1 2 4.9 3.0 1.4 0.2 setosa 4.9 3 4.7 3.2 1.3 0.2 setosa 4.7 4 4.6 3.1 1.5 0.2 setosa 4.6 5 5.0 3.6 1.4 …
121 r  plyr  dplyr 


6
替换dplyr中的“重命名”
我喜欢plyr的重命名功能rename。我最近开始使用dplyr,并且想知道是否存在使用dplyr中的函数重命名变量的简便方法,该方法与plyr一样容易使用rename吗?
118 r  rename  dplyr 

1
如何解释dplyr消息`summarise()`通过'x'重新组合输出(用.groups参数覆盖)?
更新到dplyr开发版本0.8.99.9003后,在运行group_by和summarise()时,我开始收到一条新消息(请参阅帖子标题)。 这是重新创建输出的示例: library(tidyverse) library(hablar) df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males 2018,10,1,1,1,1 2018,10,1,1,1,1 2018,11,2,2,2,2 2018,11,2,2,2,2 2019,10,3,3,3,3 2019,10,3,3,3,3 2019,11,4,4,4,4 2019,11,4,4,4,4") %>% convert(chr(year,week)) %>% mutate(total_rodents = rowSums(select_if(., is.numeric))) %>% convert(num(year,week)) %>% group_by(year,week) %>% summarise(average = mean(total_rodents)) 输出小标题正确,但是出现此消息: summarise()按“年”重新组织输出(用.groups参数覆盖) 应该如何解释?当我按年和周分组时,为什么只报告按“年”重新分组?另外,覆盖是什么意思,为什么我要这么做? 我不认为该消息表明存在问题,因为它出现在整个dplyr小插图中:https ://cran.r-project.org/web/packages/dplyr/vignettes/programming.html 我相信这是一条新消息,因为它仅出现在最近出现的SO问题中,例如如何使用dplyr融合pairwise.wilcox.test输出?和R聚合在多个列上(都没有解决重组/覆盖消息)。 谢谢!
112 r  dplyr  summarize 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.