添加列时过滤 data.table 中的行
Filtering rows in data.table while adding a column
下面的returns一个data.table有150行
library(data.table)
irisDT <- iris %>% data.table
irisDT[Sepal.Width > 3, Petal.Width_rank := row_number(Petal.Width),
by = "Species"]
但是,我正在尝试同时进行子集 Sepal.Width > 3
,而不是 "conditional mutate",即我正在尝试做类似
的事情
library(dplyr)
iris %>%
filter(Sepal.Width > 3) %>%
group_by(Species) %>%
mutate(Petal.Width_rank = row_number(Petal.Width))
在 data.table 中执行此操作的惯用方法是什么?
你可以试试
DT1 <- setDT(iris)[Sepal.Width >3, c(.SD,list(Petal.Width_rank=
row_number(Petal.Width))), by=Species]
dim(DT1)
#[1] 67 6
在 data.table_1.9.5
中,您还可以使用 frank
和不同的领带选项(正如@docendo discimus 在评论中提到的那样)
DT2 <- setDT(iris)[Sepal.Width >3, c(.SD, list(Petal.Width_rank=
frank(Petal.Width, ties.method='first'))), Species]
dim(DT2)
#[1] 67 6
identical(DT1, DT2)
#[1] TRUE
链接你的电话:
data.table(iris)[
Sepal.Width > 3
][,
Petal.Width_rank := rank(Petal.Width, ties="first"),
by=Species
][]
这会产生 67 行。
下面的returns一个data.table有150行
library(data.table)
irisDT <- iris %>% data.table
irisDT[Sepal.Width > 3, Petal.Width_rank := row_number(Petal.Width),
by = "Species"]
但是,我正在尝试同时进行子集 Sepal.Width > 3
,而不是 "conditional mutate",即我正在尝试做类似
library(dplyr)
iris %>%
filter(Sepal.Width > 3) %>%
group_by(Species) %>%
mutate(Petal.Width_rank = row_number(Petal.Width))
在 data.table 中执行此操作的惯用方法是什么?
你可以试试
DT1 <- setDT(iris)[Sepal.Width >3, c(.SD,list(Petal.Width_rank=
row_number(Petal.Width))), by=Species]
dim(DT1)
#[1] 67 6
在 data.table_1.9.5
中,您还可以使用 frank
和不同的领带选项(正如@docendo discimus 在评论中提到的那样)
DT2 <- setDT(iris)[Sepal.Width >3, c(.SD, list(Petal.Width_rank=
frank(Petal.Width, ties.method='first'))), Species]
dim(DT2)
#[1] 67 6
identical(DT1, DT2)
#[1] TRUE
链接你的电话:
data.table(iris)[
Sepal.Width > 3
][,
Petal.Width_rank := rank(Petal.Width, ties="first"),
by=Species
][]
这会产生 67 行。