当尝试在 group_by 和 mutate 中使用 get() 调用对象时,它会调出整个对象而不是分组对象。我该如何解决?
Posted
技术标签:
【中文标题】当尝试在 group_by 和 mutate 中使用 get() 调用对象时,它会调出整个对象而不是分组对象。我该如何解决?【英文标题】:When trying to call an object with get() within group_by and mutate, it brings up the entire object and not the grouped object. How do I fix this? 【发布时间】:2015-08-03 14:23:42 【问题描述】:这是我的代码:
data(iris)
spec<-names(iris[1:4])
iris$Size<-factor(ifelse(iris$Sepal.Length>5,"A","B"))
for(i in spec)
attach(iris)
output<-iris %>%
group_by(Size)%>%
mutate(
out=mean(get(i)))
detach(iris)
for 循环是围绕一些在各个部分使用对象“i”的图形和报告编写编写的。我正在使用 dplyr 和 plyr。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Size out
1 5.1 3.5 1.4 0.2 setosa A 1.199333
2 4.9 3.0 1.4 0.2 setosa B 1.199333
3 4.7 3.2 1.3 0.2 setosa B 1.199333
4 4.6 3.1 1.5 0.2 setosa B 1.199333
5 5.0 3.6 1.4 0.2 setosa B 1.199333
注意变量“out”如何具有相同的均值,即整个数据集的均值而不是分组均值。
> tapply(iris$Petal.Width,iris$Size,mean)
A B
1.432203 0.340625
> mean(iris$Petal.Width)
[1] 1.199333
【问题讨论】:
【参考方案1】:使用get()
和attach()
与dplyr
并不完全一致,因为它确实弄乱了评估函数的环境。如 NSE 小插图 (vignette("nse", package="dplyr")
) 中所述,最好在此处使用 mutate
的标准评估等效项
for(i in spec)
output<-iris %>%
group_by(Size)%>%
mutate_(.dots=list(out=lazyeval::interp(~mean(x), x=as.name(i))))
# print(output)
【讨论】:
谢谢!!那解决了它。我知道这里有人可以提供帮助。 :-)以上是关于当尝试在 group_by 和 mutate 中使用 get() 调用对象时,它会调出整个对象而不是分组对象。我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
R语言dplyr包使用dplyr函数使用group_by函数summarise函数和mutate函数计算分组占比实战
使用 group_by > mutate > slice 的更有效方式
使用 group_by 和 summarise 时出现重复行
R语言使用dplyr包使用group_by函数summarise函数和mutate函数计算分组下的均值标准差样本个数以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)