如何在 tibble 的比较运算符中忽略字符变量?

how can I ignore a character variable in a comparison operator on a tibble?

我有一个小标题(数据框),我想 select 大于某个数字(例如 20)的数字元素并将它们更新为新值(例如 0),如下所示:

mtcars_tbl <- as_tibble(rownames_to_column(mtcars))
mtcars_tbl[mtcars_tbl > 20] <- 0

然而,这也会更新我的 rownames 列,这是一个我想保留的字符变量。通常我会将行名存储在数据框的行名属性中。但是小标题不再支持行名——这有点烦人。我是否缺少其他一些明显的解决方案(除了将我的数据转换为 data.frame 并返回到 tibble)?

不是在整个 tibble 中应用替换,您可以使其以谓词为条件,例如 is.numeric

library(dplyr)
library(tibble)

mtcars_tbl <- as_tibble(rownames_to_column(mtcars))

mtcars_tbl %>%
  mutate_if(is.numeric, ~{if_else(. > 20, 0, .)})

# # A tibble: 32 x 12
#    rowname             mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#    <chr>             <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#  1 Mazda RX4           0.     6.    0.    0.  3.90  2.62  16.5    0.    1.    4.    4.
#  2 Mazda RX4 Wag       0.     6.    0.    0.  3.90  2.88  17.0    0.    1.    4.    4.
#  3 Datsun 710          0.     4.    0.    0.  3.85  2.32  18.6    1.    1.    4.    1.
#  4 Hornet 4 Drive      0.     6.    0.    0.  3.08  3.22  19.4    1.    0.    3.    1.
#  5 Hornet Sportabout  18.7    8.    0.    0.  3.15  3.44  17.0    0.    0.    3.    2.
#  6 Valiant            18.1    6.    0.    0.  2.76  3.46   0.     1.    0.    3.    1.
#  7 Duster 360         14.3    8.    0.    0.  3.21  3.57  15.8    0.    0.    3.    4.
#  8 Merc 240D           0.     4.    0.    0.  3.69  3.19  20.0    1.    0.    4.    2.
#  9 Merc 230            0.     4.    0.    0.  3.92  3.15   0.     1.    0.    4.    2.
# 10 Merc 280           19.2    6.    0.    0.  3.92  3.44  18.3    1.    0.    4.    4.
# # ... with 22 more rows