如何在 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
我有一个小标题(数据框),我想 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