我有一个tibble(数据帧),我想选择大于某个数字的数字元素(例如20),并将它们更新为新值(例如0),如下所示:
mtcars_tbl <- as_tibble(rownames_to_column(mtcars))
mtcars_tbl[mtcars_tbl > 20] <- 0
然而,这也会更新我的rownames列,这是我想要保留的字符变量。通常我会将我的rownames存储在我的数据帧的rownames属性中。但是不再支持rownames - 这有点烦人。是否还有一些其他明显的解决方案(除了将我的数据转换为data.frame并返回到tibble之外)?
答案 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