很抱歉,标题有点令人费解,因为我不知道该怎么解释。基本上,我正在尝试使用dplyr
突变 group%变量。但是,我遇到了一个问题,新的计算变量显示为数字,甚至在使用summary()
时进行计算,但不允许我调用mean()
或sd()
而不抛出出现以下错误:
Warning message:
In mean.default(., group_pct) :
argument is not numeric or logical: returning NA
以下是发生情况的一些示例。
data(mtcars)
mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
summary()
注意:通过summary()
调用group_pct时,计算正确。
data(mtcars)
mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
mean(group_pct)
...但是当我在这里要求均值时,它无法完成功能。即使当我使用ungroup()
和/或na.rm = TRUE
时,该功能仍然无法使用。我不明白这里是什么问题。
编辑:为澄清起见,我希望做这样的事情...
mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
paste0('Words: ', mean(group_pct))
希望获得最终结果:
Words: 0.09375
...我认为我不能使用summarize()
,因此从一开始就不包含它。对于给您带来的不便,我们深表歉意。
答案 0 :(得分:4)
mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
pull(group_pct) %>%
mean() %>%
paste0("Words: ", .)
[1] "Words: 0.09375"
答案 1 :(得分:3)
您需要baseR函数Post
。
with()
您最初尝试的问题是mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
with(paste0('Words: ', mean(group_pct)))
[1] "Words: 0.09375"
不在全局环境中定义,因此当它无法在查找中找到它时,您会收到错误消息。
group_pct
是一种语法糖,它告诉R在管道传递的数据帧环境中评估with
函数调用。因此它将找到paste0()
并返回您的预期结果。
答案 2 :(得分:1)
问题在于您如何使用mean
函数。查看您的错误消息:
Warning message:
In mean.default(., group_pct)
您正在尝试获取管道数据帧的group_pct
列的均值,但是发生的是mean
正在接收整个管道数据帧(.
代表管道的输出)和一个对象group_pct
,该对象可能存在或可能不存在。
看看这个答案:https://stackoverflow.com/a/38475455/8366499
如果要在均值函数中对管道化的data.frame进行子集化,则需要使用花括号{}
,以便对均值的调用被视为表达式,而不是函数调用。然后,您可以根据需要子集.
对象:
mtcars %>%
group_by(cyl) %>%
mutate(group_pct = hp / sum(hp)) %>%
{mean(.$group_pct)} %>%
paste0('Words: ', .)
[1] "Words: 0.09375"
答案 3 :(得分:0)
library(tidyverse)
library(purrr)
mtcars %>%
mutate(group_pct = hp / sum(hp)) %>%
summarise_all(mean) %>%
select(group_pct) %>%
map(function(x) paste0(" Word ", x))
结果是:
"Word 0.03125"