【发布时间】:2022-01-11 09:12:10
【问题描述】:
我需要截断许多列,使其范围从 -3.0 到 3.0。这意味着:任何大于 +3.0 的值都应重新编码为 +3.0 到一个新变量中,所有小于 -3.0 的值也应该重新编码到这个新变量中为 -3.0。
这是一个示例数据集
library(tidyverse)
MyData <- tibble( a = c(2.3, 3.0, -1.5, 3.7, -4.7, 5.2),
b = c(3.6, 1.52, -5.4, 4.6, 1.5, 2.2),
c = c(1.0, -2.6, -1.2, 2.5, -4.0, 3.0))
我发现了如何为每个旧变量创建一个新变量,使用 mutate() 和 case_when() 但是我有太多变量无法手动完成,我想知道如何我可以用更短更优雅的方式来做到这一点。我希望看到类似于源自此手动代码的输出:
MyData %>%
mutate(Ta = case_when(a >= 3.0 ~ 3.0,
a <= -3.0 ~ -3.0,
T ~ a),
Tb = case_when(b >= 3.0 ~ 3.0,
b <= -3.0 ~ -3.0,
T ~ b),
Tc = case_when(c >= 3.0 ~ 3.0,
c <= -3.0 ~ -3.0,
T ~ c))
# A tibble: 6 x 6
a b c Ta Tb Tc
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2.3 3.6 1 2.3 3 1
2 3 1.52 -2.6 3 1.52 -2.6
3 -1.5 -5.4 -1.2 -1.5 -3 -1.2
4 3.7 4.6 2.5 3 3 2.5
5 -4.7 1.5 -4 -3 1.5 -3
6 5.2 2.2 3 3 2.2 3
【问题讨论】:
标签: r tidyverse case data-wrangling recode