这是在此处提出的问题。我希望对此有些烦恼,但不确定如何。
我想做的是为每个Sepal_width
,Petal_width
等提取五分之一,然后将它们存储为嵌套的tibble。
而不是Species
,我实际上有多年的时间序列数据(所以我在这些年中筑巢(,所以我实际上想计算当年的许多列的五分之一(与Sepal.length
等(,然后拉拉将1
的所有五分位数始终多年组合成一个时间序列数据框架,然后根据五分位数将其嵌套。
我知道标题可能有些混乱,所以我要做的是:
1(用"年/(物种("嵌套数据
2(计算许多列的五分之一
3(毫无疑问,所有五分位数等于1,然后是3 ...等的数据,因此所有年份/(物种(总共将5个数据帧(或希望是新的嵌套tibbles(
4(用五分位数恢复数据(现在包含所有年份/(物种(
因此,我将有一个5个tibbles的嵌套(每个五分之一(,其中每个tibble由所有年份组成(物种(合并在一起
数据:
data(iris)
iris_quintiles <- iris %>%
as_tibble() %>%
group_by(Species) %>%
nest(.key = "data") %>%
mutate(Sep_len = map(data, ~select(.x, Species, Sepal.Length)),
Sep_len = map(Sep_len, ~mutate(.x, quantile_Sep_len = ntile(Sepal.Length, 5))),
Sep_wid = map(data, ~select(.x, Species, Sepal.Width)),
Sep_wid = map(Sep_wid, ~mutate(.x, quantile_Sep_wid = ntile(Sepal.Width, 5))),
Pet_len = map(data, ~select(.x, Species, Petal.Length)),
Pet_len = map(Pet_len, ~mutate(.x, quantile_Pet_len = ntile(Petal.Length, 5))),
Pet_wid = map(data, ~select(.x, Species, Petal.Width)),
Pet_wid = map(Pet_wid, ~mutate(.x, quantile_Pet_wid = ntile(Petal.Width, 5))))
iris_quintiles
# Here is where it gets a little messy and what I am currently doing
# is extracting them individually but I will have to do this for quantile_Sen_len, quantile_Pet_len, quantile_Pet_wid etc. where the code gets quite large
df1 <- iris_quintiles %>%
unnest() %>%
filter(quantile_Sep_len == 1)
df2 <- iris_quintiles %>%
unnest() %>%
filter(quantile_Sep_len == 2)
df3 <- iris_quintiles %>%
unnest() %>%
filter(quantile_Sep_len == 3)
df <- list(df1, df2, df3)
df <- plyr::ldply(df, data.frame)
df %>%
group_by(Species) %>%
nest(.key = "data")
预期输出: - 不是"准确",而是或多或少接近。
# A tibble: 3 x 6
QUINTILES data Sep_len Sep_wid Pet_len Pet_wid
<fct> <list> <list> <list> <list> <list>
1 quintile_1 <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 5]>
2 quintile_2 <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 5]>
3 quintile_3 <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 5]>
3 quintile_4 <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 5]>
3 quintile_5 <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 4]> <tibble [50 x 5]>
忽略蒂布布尔的大小,因为我复制并粘贴了这个tibble并将其修改了一点。
因此,有5个tibbles-每个分位数一个。sep_len
,sep_wid
,pet_len
和pet_wid
由所有数据(对于所有物种(组成 - 即在嵌套在Species
上的嵌套tibble之前 - 执行了五分列式操作,然后使用此类似
df1 <- iris_quintiles %>%
unnest() %>%
filter(quantile_Sep_len == 1)
允许我提取所有3个物种的五分之一= 1。因此,这里的df1
基本上应为quintile_1
的上述tibble中的Sep_len
。以下内容:
df2 <- iris_quintiles %>%
unnest() %>%
filter(quantile_Sep_len == 2)
对于同一tibble中的quintile_2
将是sep_len
。
我们可以在'iris_quintiles', unnest
,然后 nest
和 reduce
的列名上循环到一个数据集
library(tidyverse)
map(names(iris_quintiles)[-(1:2)], ~
iris_quintiles %>%
select(Species, .x) %>%
unnest %>%
rename_at(vars(matches("quantile")), ~ "QUINTILES") %>%
group_by(QUINTILES = str_c("quintile_", QUINTILES)) %>%
nest(.key = !!.x)) %>%
reduce(inner_join, by = "QUINTILES") %>%
arrange(factor(QUINTILES, levels = str_c("quintile_", 1:5)))