【发布时间】:2021-07-06 02:52:00
【问题描述】:
我需要以相同的方式将多个具有相同前缀的列全部变异为新列。
这是玩具数据
df <- data.frame(su_1 = round(rnorm(12),2),
su_2 = round(rnorm(12),2),
su_3 = round(rnorm(12),2))
现在说我想将每个变量的连续值分类到离散的 bin 中。我可以像这样对每一列使用三个单独的类似步骤来做到这一点
df %>% mutate(su_1_disc = ifelse(su_1 < 0, "less",
ifelse(su_1 > 0 & su_1 <= 0.5, "mid", "lots"))) -> df
df %>% mutate(su_2_disc = ifelse(su_2 < 0, "less",
ifelse(su_2 > 0 & su_2 <= 0.5, "mid", "lots"))) -> df
df %>% mutate(su_3_disc = ifelse(su_3 < 0, "less",
ifelse(su_3 > 0 & su_3 <= 0.5, "mid", "lots"))) -> df
df
# output
# su_1 su_2 su_3 su_1_disc su_2_disc su_3_disc
# 1 1.99 0.77 -0.17 lots lots less
# 2 0.51 -0.76 -1.24 lots less less
# 3 1.50 -0.36 0.28 lots less mid
# 4 0.86 0.88 -0.52 lots lots less
# 5 0.08 0.63 -0.76 mid lots less
# 6 -0.51 -0.99 0.01 less less mid
# 7 0.35 1.59 0.19 mid lots mid
# 8 0.16 0.35 0.38 mid mid mid
# 9 -0.75 -0.45 1.75 less less lots
# 10 0.97 0.62 -0.05 lots lots less
# 11 -0.07 0.47 -0.24 less mid less
# 12 0.61 -0.27 -1.55 lots less less
但我想使用新的 dplyr 1.0.0 功能一步完成
我试过了
df %>%
mutate(across(starts_with("su_"),
ifelse(.x < 0, "less",
ifelse(.x > 0 & .x <= 0.5, "mid", "lots"))))
但是它抛出了一个错误。我知道.names 需要进入某个地方,但我有点迷路了。
【问题讨论】: