Tidyr: كيفية التداخل في أعمدة القوائم الفردية مقابل قائمة إطارات البيانات؟

تم إنشاؤها على ٦ مايو ٢٠١٦  ·  3تعليقات  ·  مصدر: tidyverse/tidyr

وفقًا للتوجيهات (https://github.com/hadley/dplyr/issues/1800) ، أنشر هذا السؤال هنا.

ما هي أفضل طريقة لإجراء هذا الاختلاف على تداخل إطار بيانات؟ لم أرغب في استخدام tidyr::nest() لأنني لم أرغب في دفن المتغيرات الأخرى في إطارات البيانات - كنت أرغب في استخدامها كأعمدة قائمة فردية. Sthg مثل هذا:

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarize(gear = split(gear, cyl),
            wt = split(wt, cyl))
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>

منذ ذلك الحين ، وجدت طريقة أخرى للقيام بذلك باستخدام purrr::transpose() :

library(purrr)
library(dplyr)
library(tidyr)

mtcars %>% 
  group_by(cyl) %>% 
  nest(gear, wt) %>% 
  bind_cols(transpose(.$data)) %>% 
  select(-data)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     6  <dbl [7]>  <dbl [7]>
#> 2     4 <dbl [11]> <dbl [11]>
#> 3     8 <dbl [14]> <dbl [14]>

التعليق الأكثر فائدة

أعتقد أن أبسط طريقة هي على الأرجح:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

لست متأكدًا مما إذا كان هذا يستحق فعلًا جديدًا من المستوى الأعلى أم لا.

هل يمكنك إعطاء المزيد من المعلومات حول السياق الأوسع؟

ال 3 كومينتر

أعتقد أن أبسط طريقة هي على الأرجح:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

لست متأكدًا مما إذا كان هذا يستحق فعلًا جديدًا من المستوى الأعلى أم لا.

هل يمكنك إعطاء المزيد من المعلومات حول السياق الأوسع؟

طريقك لخلق النتيجة أنظف بكثير.

كان المشغل الفوري هو إنشاء أمثلة لمعرفة سبب عدم unnest() إطارات بيانات معينة ، والتي تبين أنها مشكلة مع dplyr::combine() (https://github.com/hadley/dplyr/ القضايا / 1780).

سوف اغلق. إذا كان هذا مهمًا في الحياة الواقعية ، فسيظهر مرة أخرى.

إن رؤية الحل الأخير يجعلني أدرك أن summarise_each() هو خيار آخر.

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarise_each("list", gear, wt)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات