функция вложенных столбцов, не дающая ожидаемого результата - PullRequest
0 голосов
/ 19 июня 2019

У меня есть некоторые данные, похожие на набор данных iris ниже.Я пытаюсь вложить данные, основанные на двух столбцах (group_by(Species, years)).Я положил данные в таблицу под названием data.Что выглядит так:

# A tibble: 15 x 3
   Species    years data             
   <fct>      <int> <list>           
 1 setosa         1 <tibble [10 x 4]>
 2 setosa         5 <tibble [10 x 4]>
 3 setosa         3 <tibble [10 x 4]>
 4 setosa         4 <tibble [10 x 4]>
 5 setosa         2 <tibble [10 x 4]>

Я пытаюсь рассчитать квантили для каждого тибля.Итак, вычислите Species == virginica и years == 1 и вычислите квантиль Sepal.Length, однако я где-то ошибаюсь в части virginica_Q = map(data, ~select(.x, Sepal.Length, Sepal.Width)), так как я выбираю data (которая состоит из целых данных, а не отфильтрованных данных иливложенные данные).

Этот код дает мне желаемый результат:

iris %>%
  filter(Species == "virginica") %>%
  filter(years == 1) %>%
  mutate(Q_vir_sep_len = ntile(Sepal.Length, 4))

Где у меня теперь есть квантили для Sepal.Length:

  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species years Q_vir_sep_len
1           6.3         3.3          6.0         2.5 virginica     1             1
2           7.6         3.0          6.6         2.1 virginica     1             4
3           6.5         3.2          5.1         2.0 virginica     1             1
4           6.4         3.2          5.3         2.3 virginica     1             1
5           6.9         3.2          5.7         2.3 virginica     1             3
6           7.2         3.2          6.0         1.8 virginica     1             3
7           7.4         2.8          6.1         1.9 virginica     1             3
8           7.7         3.0          6.1         2.3 virginica     1             4
9           6.7         3.1          5.6         2.4 virginica     1             2
10          6.7         3.0          5.2         2.3 virginica     1             2

Я просто хочуповторить это для всех nested_tibbles

данных / кода

data(iris)

iris$years <- floor(runif(nrow(iris), min=0, max=5)) # edited the years column
iris

nested_iris <- iris %>%
  group_by(Species, years) %>%
  nest(.key = "data") %>%
    mutate(
      virginica_Q = map(data, ~select(.x, Sepal.Length, Sepal.Width)) %>%
        map(., ~mutate(.x, Q_vir_sep_len = ntile(Sepal.Length, 4))),
      Setosa_Q = map(data, ~select(.x, Sepal.Length, Sepal.Width)) %>%
        map(., ~mutate(.x, Q_set_sep_len = ntile(Sepal.Length, 4)))
      )


nested_iris

Я думаю, что решение для меня так же просто, как:

nested_iris <- iris %>%
      group_by(Species, years) %>%
      nest(.key = "data") %>%
        mutate(
          ALL_QUANTILES = map(data, ~select(.x, Sepal.Length, Sepal.Width)) %>%
            map(., ~mutate(.x, myQuantiles = ntile(Sepal.Length, 4))),
          )

иМне не нужно было создавать разные тиблы для каждого квантиля ...

1 Ответ

0 голосов
/ 19 июня 2019

Если вы хотите изменить вложенные тиблы, то это должно сделать:

nested_iris <- iris %>% 
  group_by(Species, years) %>% 
  nest(.key = "data") %>% 
  mutate(data = map(data, function(df) {
    mutate(df, Sepal.Length.Q4 = ntile(Sepal.Length, 4))
  }))

# then looking in the first nested tibble:
nested_iris$data[[1]]

# A tibble: 10 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length.Q4
          <dbl>       <dbl>        <dbl>       <dbl>           <int>
 1          5.1         3.5          1.4         0.2               3
 2          5.4         3.9          1.7         0.4               3
 3          5.4         3.7          1.5         0.2               3
 4          5.7         4.4          1.5         0.4               4
 5          5.4         3.4          1.7         0.2               4
 6          5           3            1.6         0.2               1
 7          4.8         3.1          1.6         0.2               1
 8          5           3.2          1.2         0.2               2
 9          5           3.5          1.3         0.3               2
10          4.8         3            1.4         0.3               1

Затем вы можете определить любые новые столбцы, которые вы хотите внутри внутреннего mutate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...