Tag: dplyr

用dplyr总结多个列?

我用dplyr语法挣扎了一下。 我有一个数据框与不同的variables和一个分组variables。 现在我想计算每个组内每列的平均值,在R中使用dplyr。 df <- data.frame(a=sample(1:5, 10, replace=T), b=sample(1:5, 10, replace=T), c=sample(1:5, 10, replace=T), d=sample(1:5, 10, replace=T), grp=sample(1:3, 10, replace=T)) df %>% group_by(grp) %>% summarise(mean(a)) 这给了我指出“grp”表示的每个组的列“a”的意思。 我的问题是:是否有可能一次获得每个组中的每列的手段? 或者是否必须为每列重复df %>% group_by(grp) %>% summarise(mean(a)) ? 我想要的是类似的东西 df %>% group_by(grp) %>% summarise(mean(a:d)) # "mean(a:d)" does not work

data.table vs dplyr:一个人可以做些什么,另一个不行或者做得不好?

概观 我对data.table比较熟悉,与data.table不太dplyr 。 我已经读过一些dplyr小插曲和例子,到目前为止,我的结论是: data.table和dplyr在速度上是可比较的,除非有很多(即> 10-100K)的组,在其他一些情况下(见下面的基准) dplyr有更多可访问的语法 dplyr抽象(或将)潜在的数据库交互 有一些次要的function差异(请参阅下面的“示例/用法”) 在我看来2.不会承受太多的重量,因为我对data.table相当熟悉,但我明白,对于新用户来说这将是一个很大的因素。 我想避免一个关于哪一个更直观的论点,因为从已经熟悉data.table的人的angular度来看,这与我提出的具体问题是无关的。 我也想避免讨论“更直观”如何导致更快的分析(当然,但是,不是我最感兴趣的是这里)。 题 我想知道的是: 是否有分析任务比熟悉软件包的人更容易使用一个或另一个软件包进行编码(即,所需的击键与所需的深奥级别的组合,其中每一个都是好事)。 是否有分析任务在一个包中比另一个更有效地执行(即超过2倍)。 最近的一个问题使我想到了这个问题 ,因为直到那时,我不认为dplyr会提供比dplyr更多的东西。 这里是dplyr解决scheme(数据在Q末尾): dat %.% group_by(name, job) %.% filter(job != "Boss" | year == min(year)) %.% mutate(cumu_job2 = cumsum(job2)) 这比我在data.table解决scheme上的尝试要好得多。 也就是说,良好的data.table解决scheme也是相当不错的(感谢Jean-Robert,Arun,并且在这里我注意到我偏爱最严格的最佳解决scheme): setDT(dat)[, .SD[job != "Boss" | year == min(year)][, cumjob := cumsum(job2)], by=list(id, job) ] 后者的语法可能看起来很深奥,但是如果你习惯data.table (即不使用一些更深奥的技巧),它实际上是非常简单的。 理想情况下,我想看到的是一些很好的例子, dplyr或data.table方式更加简洁或者performance更好。 […]

R – dplyr – mutate – 使用dynamicvariables名称

我想使用dplyr的 mutate()在数据框中创build多个新列。 列名和它们的内容应该是dynamic生成的。 来自虹膜的示例数据: require(dplyr) data(iris) iris <- tbl_df(iris) 我创build了一个函数来从Petal.Widthvariables中改变我的新列: multipetal <- function(df, n) { varname <- paste("petal", n , sep=".") df <- mutate(df, varname = Petal.Width * n) ## problem arises here df } 现在我创build一个循环来build立我的列: for(i in 2:5) { iris <- multipetal(df=iris, n=i) } 然而,由于mutate认为varname是一个文字variables名,循环只创build一个新variables(称为varname)而不是四个(称为petal.2 – petal.5)。 我怎样才能mutate()使用我的dynamic名称作为variables名?

如何在每个组中创建一个滞后变量?

我有一个data.table: set.seed(1) data <- data.table(time = c(1:3, 1:4), groups = c(rep(c("b", "a"), c(3, 4))), value = rnorm(7)) data # groups time value # 1: b 1 -0.6264538 # 2: b 2 0.1836433 # 3: b 3 -0.8356286 # 4: a 1 1.5952808 # 5: a 2 0.3295078 # 6: a 3 -0.8204684 # 7: a […]

收集多组列

我有一个在线调查的数据,受访者经历了1-3次的问题循环。 调查软件(Qualtrics)将这些数据记录在多个栏目中,也就是说,调查中的Q3.2.1.将具有Q3.2.1. , Q3.2.2. 和Q3.2.3. : df <- data.frame( id = 1:10, time = as.Date('2009-01-01') + 0:9, Q3.2.1. = rnorm(10, 0, 1), Q3.2.2. = rnorm(10, 0, 1), Q3.2.3. = rnorm(10, 0, 1), Q3.3.1. = rnorm(10, 0, 1), Q3.3.2. = rnorm(10, 0, 1), Q3.3.3. = rnorm(10, 0, 1) ) # Sample data id time Q3.2.1. Q3.2.2. […]