将data.table语法转换为dplyr语法

Tob*_*nne 2 r dplyr data.table tidyverse

我想以data.tabledplyr的方式获取以下代码:

library(tidyverse)
library(data.table)

Iris <- as.data.table(iris)

Iris[, .(m = mean(Sepal.Width[Sepal.Width < 3])), Species]

Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的内容:

Iris %>% 
  group_by(Species) %>% 
  summarise(m = mean(Sepal.Width))
Run Code Online (Sandbox Code Playgroud)

但是我不知道该把我放在哪里Sepal.Width < 3

akr*_*run 5

与in data.table或in中的方法相同base R,创建逻辑向量(Sepal.Width < 3),使用该逻辑向量将列作为子集[并获取mean值的子集

library(dplyr)
Iris %>% 
  group_by(Species) %>%
  summarise(m = mean(Sepal.Width[Sepal.Width <3]))
# A tibble: 3 x 2
#  Species        m
#  <fct>      <dbl>
#1 setosa      2.60
#2 versicolor  2.61
#3 virginica   2.69
Run Code Online (Sandbox Code Playgroud)

  • @natej也许这已经是您要说的了,但是`filter(cond)%&gt;%summarise(x = mean(x))'不等于`summarise(x = mean(x [cond]))),因为某些组中零行可能满足条件。从这个意义上讲,后者是OP DT代码的更正确翻译。 (4认同)