是否有方法将data.frame
列中高于或低于设定阈值的值替换为用户在单个步骤中确定的最大/最小阈值?data.table::between()
函数返回TRUE
或FALSE
,但没有指示它是高于还是低于...
参见下文的MWE。我可以在2个步骤中得到结果,但想知道是否已经有一个内置的函数,用于用最大/最小值替换高于/低于最大/最小值的值。
谢谢
library(data.table)
library(magrittr)
a <- data.table(colA = LETTERS[seq(1,10)],
colB = 1:10)
the_max <- 7
the_min <- 3
# creates TRUE/FALSE column...
a[, colC := between(colB, the_min, the_max)]
a
#> colA colB colC
#> 1: A 1 FALSE
#> 2: B 2 FALSE
#> 3: C 3 TRUE
#> 4: D 4 TRUE
#> 5: E 5 TRUE
#> 6: F 6 TRUE
#> 7: G 7 TRUE
#> 8: H 8 FALSE
#> 9: I 9 FALSE
#> 10: J 10 FALSE
# gets the result...
a[, colD := colB] %>%
.[colD < the_min, colD := the_min] %>%
.[colD > the_max, colD := the_max]
a
#> colA colB colC colD
#> 1: A 1 FALSE 3
#> 2: B 2 FALSE 3
#> 3: C 3 TRUE 3
#> 4: D 4 TRUE 4
#> 5: E 5 TRUE 5
#> 6: F 6 TRUE 6
#> 7: G 7 TRUE 7
#> 8: H 8 FALSE 7
#> 9: I 9 FALSE 7
#> 10: J 10 FALSE 7
创建于2019-08-12由reprex package(v0.2.1)
2条答案
按热度按时间4c8rllxm1#
可以用
pmin/pmax
来实现yzuktlbb2#
关于此线程:Replace all values lower than threshold in R
这应该更有效,但是它使用了与 *akrun的 * 答案相同的逻辑。
p.s.你不需要
magrittr
来在data.table
中执行多个步骤:这与管道解决方案的作用相同。