- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
% mutate_if(~is.n-6ren">
大家好,
library(dplyr)
library(tibble)
mtcars %>%
rownames_to_column("modelle") %>%
mutate_if(~is.numeric(.x) & mean(.x) > 50, ~(.x / 1000))
Warning message:
In mean.default(.x) : argument is not numeric or logical: returning NA
这个错误似乎是由于字符向量引起的。它有效,但仍然很丑陋。我做错了什么吗?在这种情况下可以做得更好吗?
谢谢!
最佳答案
R 不会短路矢量化 &
,因此这会同时运行 is.numeric
和 mean
在所有列上。由于您的第一列 (modelle
) 显然是 character
,因此它失败了。
但是,您实际上不需要将其矢量化。如果您从矢量化 &
更改为二进制 &&
,R 会将其短路并获得您想要的行为。
mtcars %>%
rownames_to_column("modelle") %>%
mutate_if(~is.numeric(.x) && mean(.x) > 50, ~(.x / 1000)) %>%
head()
# modelle mpg cyl disp hp drat wt qsec vs am gear carb
# 1 Mazda RX4 21.0 6 0.160 0.110 3.90 2.620 16.46 0 1 4 4
# 2 Mazda RX4 Wag 21.0 6 0.160 0.110 3.90 2.875 17.02 0 1 4 4
# 3 Datsun 710 22.8 4 0.108 0.093 3.85 2.320 18.61 1 1 4 1
# 4 Hornet 4 Drive 21.4 6 0.258 0.110 3.08 3.215 19.44 1 0 3 1
# 5 Hornet Sportabout 18.7 8 0.360 0.175 3.15 3.440 17.02 0 0 3 2
# 6 Valiant 18.1 6 0.225 0.105 2.76 3.460 20.22 1 0 3 1
进一步证明&
没有短路。
mymean <- function(x, ...) {
if (is.character(x)) {
message("character?")
return(Inf) # this is certainly not the right thing to do in general ...
} else mean(x, ...)
}
mtcars %>%
rownames_to_column("modelle") %>%
mutate_if(~is.numeric(.x) & mymean(.x) > 50, ~(.x / 1000)) %>%
head()
# character?
# modelle mpg cyl disp hp drat wt qsec vs am gear carb
# 1 Mazda RX4 21.0 6 0.160 0.110 3.90 2.620 16.46 0 1 4 4
# 2 Mazda RX4 Wag 21.0 6 0.160 0.110 3.90 2.875 17.02 0 1 4 4
# 3 Datsun 710 22.8 4 0.108 0.093 3.85 2.320 18.61 1 1 4 1
# 4 Hornet 4 Drive 21.4 6 0.258 0.110 3.08 3.215 19.44 1 0 3 1
# 5 Hornet Sportabout 18.7 8 0.360 0.175 3.15 3.440 17.02 0 0 3 2
# 6 Valiant 18.1 6 0.225 0.105 2.76 3.460 20.22 1 0 3 1
如果发生短路,那么mymean
将永远无法收到消息。 (我认为这个 mymean
在这里不是一个可行的替代品,原因如下:(1) 使用 Inf
只是为了确保条件在对 mean
的调用之外有效,但如果发生错误/警告并且需要 numeric
,那么通常应该返回 NA
code> 或 NaN
,不是数字...即使您可能不认为 Inf
是一个真正可用的数字。(2) 它正在解决症状,而不是问题。问题在于矢量化逻辑表达式中不存在短路。)
关于r - mutate_if - 警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60246025/
大家好, library(dplyr) library(tibble) mtcars %>% rownames_to_column("modelle") %>% mutate_if(~is.n
我想通过 dplyr 中的 mutate_if 将 NA 值替换为零。语法如下: set.seed(1) mtcars[sample(1:dim(mtcars)[1], 5), samp
寻求一些有关如何使用 dplyr 的 mutate_if 语句来检查是否需要将列转换为因子变量的建议。 这个函数说明了我正在尝试做的事情。问题是,当我想为函数中的“max_value”参数传递一些内容
我想使用 dplyr 的 mutate_if() 函数将列表列转换为数据帧列,但当我尝试这样做时遇到了令人费解的错误。我正在使用 dplyr 0.5.0、purrr 0.2.2、R 3.3.0。 基本
我想提取 mutate_if 函数调用中的列名称。有了这个,我想在 a 中查找一个值不同的表并用查找值填充缺失值。我尝试使用 quosure 语法,但它不起作用。是否可以直接提取列名? 示例数据 df
我想根据多个条件改变列。例如,对于最大值为 5 并且列名称包含“xy”的每一列,应用一个函数。 df df xx1 xy1 xx2 xy2 1 0 0 0 0 2 1 5
真的很困惑为什么这不起作用: df % mutate_if((is.character(.) & names(.) %in% varnames), funs(mean(as
真的很困惑为什么这不起作用: df % mutate_if((is.character(.) & names(.) %in% varnames), funs(mean(as
我想同时对多个字符变量使用 summarise_at 和 mutate_at。我看过很多使用整数变量的例子,但我就是想不通字符变量。正下方是我用来为字符(或因子)变量生成描述性统计信息的代码。 lib
我想将列中的所有 NA 更改为 0。 我可以用 mutate() ,但不是 mutate_if() . 这有效: > test test %>% select_("Q3.2", "Q8.2") %>
我有超过 2000 列应该进行虚拟编码的数据。但是,偶尔会有值大于 1 的情况。所以,我想一次改变所有这些列并将大于 1 的任何内容转换为 1。这是前几列数据的片段列。 我试过使用 mutate_if
我正在我的包中创建一个通用函数。目标是找到百分比列,然后使用 parse_number如果他们是 character列。我一直无法使用 mutate_at 找到解决方案和 ifelse .我在下面粘贴
如果可能的话,我想使用 mutate_if 和 replace_na 的某种变体替换数字列中的 NA,但无法弄清楚语法。 df # A tibble: 3 x 3 #> first second
我正在使用 RPostgreSQL 从 Postgres 数据库中提取数据,它在导入 R 时将时间戳转换为系统时区。因此,导入后我想设置所有的时区UTC 时间戳。我想我可以使用 dplyr 和 lub
我有以下示例输出: country country-year year a b 1 France France2000 2000 NA NA 2 Fr
我有一个超过 100 列的数据集,但例如让我们假设我有一个数据集看起来像 dput(tib) structure(list(f_1 = c("A", "O", "AC", "AC", "AC", "O
根据 the documentation of the dplyr package : # The _if() variants apply a predicate function (a funct
我是一个狂热的 R 用户,并且正在学习 Python。我可以在 R 中轻松运行的示例代码之一让我在 Python 中感到困惑。 这是原始数据(在 R 中构建): library(tidyverse)
我认为标题相当简单。但只是提供一些数据和示例: test % gather_if(is.numeric, 'key', 'value') ?这将给出与以下相同的输出: > test %>% gathe
我是一名优秀的程序员,十分优秀!