本文介绍了将Ntile应用于嵌套的小对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将 ntile
应用于一些嵌套的小块,但似乎无法正常工作。
I am trying to apply ntile
over some nested tibbles but I cannot seem to get it working.
data(iris)
iris %>%
group_by(Species) %>%
mutate(quintile = ntile(Petal.Length, 5)) # This works
nested_iris <- iris %>%
as_tibble() %>%
group_by(Species) %>%
nest(.key = "data") %>%
mutate(quintile = map(data, ~ntile(.x, Petal.Length, 5))) #This doesn`t work
推荐答案
将 ntile
放入 mutate
调用中,并将数据更新为在其中创建一个新列。最好使存储结构最小化
Place the ntile
inside a mutate
call and update the 'data' to create a new column inside it. It may be better to minimize the storage structure
library(tidyverse)
o1 <- iris %>%
as_tibble() %>%
group_by(Species) %>%
nest(.key = "data") %>%
mutate(data = map(data, ~
.x %>%
mutate(quintile = ntile(Petal.Length, 5))))
# A tibble: 3 x 2
# Species data
# <fct> <list>
#1 setosa <tibble [50 × 5]>
#2 versicolor <tibble [50 × 5]>
#3 virginica <tibble [50 × 5]>
注意:假设OP需要所有带有五分位数的列。
NOTE: Assuming that the OP need all the columns with the additional 'quintile'.
然后,我们 unstest
o1 %>%
unnest
# A tibble: 150 x 6
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width quintile
# <fct> <dbl> <dbl> <dbl> <dbl> <int>
# 1 setosa 5.1 3.5 1.4 0.2 2
# 2 setosa 4.9 3 1.4 0.2 2
# 3 setosa 4.7 3.2 1.3 0.2 1
# 4 setosa 4.6 3.1 1.5 0.2 3
# 5 setosa 5 3.6 1.4 0.2 2
# 6 setosa 5.4 3.9 1.7 0.4 5
# 7 setosa 4.6 3.4 1.4 0.3 2
# 8 setosa 5 3.4 1.5 0.2 3
# 9 setosa 4.4 2.9 1.4 0.2 2
#10 setosa 4.9 3.1 1.5 0.1 3
# … with 140 more rows
这篇关于将Ntile应用于嵌套的小对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!