首页 > 解决方案 > 如何在某些特定列之前加上减号 (-)

问题描述

我有一个包含 2000 列的数据框,都是数字变量,我想将特定列 [其名称带有 X1COL,X2COL 的星号] 从正值转换为负值

前:

¦ 1COL1 ¦ 2COL ¦ 3COL ¦ X1COL ¦ 4COL ¦ X2COL ¦

    +      +       +      +      +       +

后:

¦ 1COL1 ¦ 2COL ¦ 3COL ¦ X1COL ¦ 4COL ¦ X2COL ¦

    +      +      +       -       +      -

标签: r

解决方案


dplyr::mutate_at允许在名称与正则表达式匹配的列上应用函数,例如:

library(dplyr)

df = data.frame(
  X1COL = 1:3,
  X2COL = 1:3,
  X3COL = 1:3
)
df$`1COL` = 1:3
df$`2COL` = 1:3
df$`3COL` = 1:3

df
#   X1COL X2COL X3COL 1COL 2COL 3COL
# 1     1     1     1    1    1    1
# 2     2     2     2    2    2    2
# 3     3     3     3    3    3    3

# to convert all columns like "X.COL" to negative
# which means X1COL, X2COL, X3COL, ...
df %>% mutate_at(vars(matches("X.COL")), `-`)

#   X1COL X2COL X3COL 1COL 2COL 3COL
# 1    -1    -1    -1    1    1    1
# 2    -2    -2    -2    2    2    2
# 3    -3    -3    -3    3    3    3


# to convert all columns starts with "X1COL" or "X2COL" to negative
# which means X1COL.a, X2COL.b, X1COL.ab, X2COL.bc
df %>% mutate_at(vars(matches("^X(1|2)COL.*")), `-`)

#   X1COL X2COL X3COL 1COL 2COL 3COL
# 1    -1    -1     1    1    1    1
# 2    -2    -2     2    2    2    2
# 3    -3    -3     3    3    3    3


推荐阅读