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

时间:2018-03-13 00:07:47

标签: r tibble

我有一个tibble(数据帧),我想选择大于某个数字的数字元素(例如20),并将它们更新为新值(例如0),如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

不是在整个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