R Academy · पाठ

डेटा फ़्रेम को Nesting और Unnesting करना

tidy workflows में list-columns के साथ काम करने के लिए nest() और unnest() का उपयोग करें।

पाठ 4, कुल 4 में से13 चरण

डेटा फ़्रेम को Nesting और Unnesting करना, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

सूची-कॉलम और नेस्टेड डेटा

सूची-कॉलम डेटा फ़्रेम का ऐसा कॉलम होता है, जिसके प्रत्येक सेल में कोई R ऑब्जेक्ट (वेक्टर, डेटा फ़्रेम, मॉडल या सूची) होता है। इससे अन्य कॉलमों के साथ संरचित उप-डेटा रखना संभव होता है और समूह-आधारित शक्तिशाली कार्यप्रवाह सक्षम होते हैं।

library(tidyr)
library(dplyr)

# A simple data frame with a list-column
df <- data.frame(
  group = c('A','B','C'),
  n = c(3, 2, 4)
)
df$values <- list(c(1,2,3), c(4,5), c(6,7,8,9))

print(df)
print(df$values[[1]])  # Access the first list element

nest() — नेस्टेड डेटा फ़्रेम बनाना

nest(df, data = c(col1, col2)) गैर-नेस्टेड कॉलमों के आधार पर पंक्तियों को समूहित करता है और निर्दिष्ट कॉलमों को डेटा फ़्रेमों वाले सूची-कॉलम में पैक करता है। प्रत्येक समूह के लिए एक पंक्ति होती है, जिसमें एक छोटा डेटा फ़्रेम होता है।

library(tidyr)
library(dplyr)

df <- data.frame(
  region = c('East','East','East','West','West'),
  month = c(1,2,3,1,2),
  sales = c(100,120,110,200,190)
)

nested <- df %>%
  nest(data = c(month, sales))

print(nested)
print(nested$data[[1]])  # East region's data

group_by() के साथ nest()

सबसे सामान्य तरीका है: group_by() के बाद nest() का उपयोग करके प्रत्येक समूह के लिए एक पंक्ति बनाएँ और बचे हुए सभी कॉलमों को data सूची-कॉलम में पैक करें। नए tidyr संस्करणों में यह nest(.by = group_col) के समतुल्य है।

library(tidyr)
library(dplyr)

df <- data.frame(
  category = c('A','A','A','B','B','C','C','C','C'),
  x = c(1,2,3,4,5,6,7,8,9),
  y = c(2,4,3,8,7,5,6,9,8)
)

nested <- df %>%
  group_by(category) %>%
  nest()

print(nested)
cat('Rows per category B:', nrow(nested$data[[2]]))

नेस्टेड डेटा फ़्रेमों के साथ map()

डेटा नेस्ट हो जाने के बाद, प्रत्येक छोटे डेटा फ़्रेम पर कोई फ़ंक्शन लागू करने के लिए purrr::map() का उपयोग करें। फ़ंक्शन को एक बार में एक डेटा फ़्रेम मिलता है और परिणाम एक नया सूची-कॉलम बन जाते हैं—अक्सर यह फिट किया गया मॉडल होता है।

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

df <- data.frame(
  group = c('A','A','A','B','B','B'),
  x = c(1,2,3,1,2,3),
  y = c(2.1,4.0,5.9,3.2,5.8,9.1)
)

models <- df %>%
  group_by(group) %>%
  nest() %>%
  mutate(model = map(data, ~lm(y ~ x, data = .x)))

print(models)

map() से मॉडल परिणाम निकालना

प्रत्येक समूह के लिए मॉडल फिट करने के बाद, हर मॉडल से परिणाम निकालने के लिए map() को broom::tidy() या coef() जैसे फ़ंक्शन के साथ उपयोग करें। आउटपुट एक और सूची-कॉलम होता है, जिसे बाद में अननेस्ट किया जा सकता है।

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

df <- data.frame(
  group = c('A','A','A','B','B','B'),
  x = c(1,2,3,1,2,3),
  y = c(2.1,4.0,5.9,3.2,5.8,9.1)
)

df %>%
  group_by(group) %>%
  nest() %>%
  mutate(
    model = map(data, ~lm(y ~ x, data = .x)),
    r_squared = map_dbl(model, ~summary(.x)$r.squared),
    intercept = map_dbl(model, ~coef(.x)[1]),
    slope = map_dbl(model, ~coef(.x)[2])
  ) %>%
  select(group, r_squared, intercept, slope)

unnest() — सूची-कॉलमों का विस्तार करना

unnest(df, cols = data), nest() का व्युत्क्रम है। यह सूची-कॉलम को फिर से सामान्य कॉलमों में फैलाता है और आवश्यकता के अनुसार पहचानकर्ता कॉलमों को दोहराता है। किस सूची-कॉलम को अननेस्ट करना है, यह बताने के लिए cols का उपयोग करें।

library(tidyr)
library(dplyr)

nested <- data.frame(
  region = c('East','West')
)
nested$data <- list(
  data.frame(month=1:3, sales=c(100,120,110)),
  data.frame(month=1:2, sales=c(200,190))
)

unnested <- unnest(nested, cols = data)
print(unnested)

unnest_longer() — सूची को पंक्तियों में फैलाना

unnest_longer(df, col) सूची-कॉलम का विस्तार करता है, जिससे सूची का प्रत्येक तत्व एक पंक्ति बन जाता है। डेटा फ़्रेम अपेक्षित करने वाले unnest() के विपरीत, unnest_longer() वेक्टर या स्केलर वाली सूचियों के साथ काम करता है।

library(tidyr)

df <- data.frame(
  person = c('Alice','Bob','Carol')
)
df$skills <- list(
  c('R','Python','SQL'),
  c('Excel','Tableau'),
  c('R','Julia','Stan','BUGS')
)

unnest_longer(df, skills)

unnest_wider() — सूची को कॉलमों में फैलाना

unnest_wider(df, col) प्रत्येक सूची-तत्व को नए कॉलमों के समूह में फैलाता है। सूची में नामित तत्व होने चाहिए—वे नाम कॉलम नाम बन जाते हैं। यह नेस्टेड JSON-जैसी संरचनाओं के लिए उपयोगी है।

library(tidyr)

df <- data.frame(id = 1:3)
df$info <- list(
  list(name='Alice', age=30, city='NYC'),
  list(name='Bob', age=25, city='LA'),
  list(name='Carol', age=35, city='Chicago')
)

unnest_wider(df, info)

पूर्ण नेस्टेड कार्यप्रवाह पैटर्न

नेस्टेड डेटा फ़्रेम का पूरा कार्यप्रवाह: group_by() + nest() → map() से फ़ंक्शन लागू करें → परिणाम निकालें → समतल डेटा फ़्रेम पाने के लिए unnest() करें। यह पैटर्न प्रत्येक समूह पर कोई भी विश्लेषण चलाने में सक्षम बनाता है।

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

df <- data.frame(
  region = c('East','East','East','West','West','West'),
  month = c(1,2,3,1,2,3),
  revenue = c(100,120,115,200,195,210)
)

df %>%
  group_by(region) %>%
  nest() %>%
  mutate(
    mean_rev = map_dbl(data, ~mean(.x$revenue)),
    trend = map_dbl(data, ~coef(lm(revenue~month, data=.x))[2])
  ) %>%
  select(region, mean_rev, trend)

कई कॉलमों को नेस्ट करना

आप चुन सकते हैं कि कौन से कॉलम नेस्टेड डेटा फ़्रेम में जाएँ। उन्हें nest(data = c(...)) में स्पष्ट रूप से निर्दिष्ट करें। निर्दिष्ट न किए गए कॉलम बाहरी डेटा फ़्रेम में सूची-कॉलम के साथ सामान्य कॉलम बने रहते हैं।

library(tidyr)
library(dplyr)

df <- data.frame(
  region = c('East','East','West','West'),
  year = c(2023,2024,2023,2024),
  q1 = c(100,110,200,210),
  q2 = c(105,115,195,215),
  target = c(105,112,198,212)
)

# Only nest quarterly data, keep target as outer column
nested <- df %>%
  group_by(region, year) %>%
  nest(quarters = c(q1, q2))

print(nested)

नेस्टेड डेटा फ़्रेम कब उपयोग करें

नेस्टेड डेटा फ़्रेम तब बहुत उपयोगी होते हैं जब आपको समूहों पर एक ही मॉडल फिट करना हो, प्रत्येक समूह के लिए अनुकरण चलाना हो, उपसमुच्चयों पर जटिल रूपांतरण लागू करने हों या JSON-जैसे पदानुक्रमित डेटा के साथ काम करना हो। ये समूह-विशिष्ट डेटा को समूह-स्तरीय मेटाडेटा के साथ व्यवस्थित रखते हैं।

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

# Bootstrap confidence interval per group
df <- data.frame(
  group = c('A','A','A','A','B','B','B','B'),
  value = c(10,12,11,13,20,22,19,21)
)

set.seed(42)
df %>%
  group_by(group) %>%
  nest() %>%
  mutate(
    boot_means = map(data, function(d) {
      replicate(100, mean(sample(d$value, replace=TRUE)))
    }),
    ci_low = map_dbl(boot_means, ~quantile(.x, 0.025)),
    ci_high = map_dbl(boot_means, ~quantile(.x, 0.975))
  ) %>%
  select(group, ci_low, ci_high)

त्वरित जाँच

डेटा फ़्रेमों वाले सूची-कॉलम को वापस समतल डेटा फ़्रेम में फैलाने का सही तरीका क्या है?

पुनरावृत्ति: नेस्ट करना और अननेस्ट करना

नेस्टेड डेटा फ़्रेम कार्यप्रवाह के मुख्य बिंदु:

  • nest(data = c(cols)) कॉलमों को प्रति समूह एक डेटा फ़्रेम वाले सूची-कॉलम में पैक करता है
  • group_by() + nest() — समूह के आधार पर नेस्ट करने का मानक पैटर्न
  • map(nested$data, fn) — प्रत्येक नेस्टेड डेटा फ़्रेम पर कोई भी फ़ंक्शन लागू करता है
  • unnest(cols = data) — डेटा फ़्रेमों वाले सूची-कॉलम को वापस समतल प्रारूप में फैलाता है
  • unnest_longer(col) — वेक्टर/स्केलर वाली सूची को पंक्तियों में फैलाता है
  • unnest_wider(col) — नामित सूची को कॉलमों में फैलाता है
  • प्रति-समूह मॉडलिंग, बूटस्ट्रैपिंग और JSON डेटा संसाधन के लिए आदर्श
library(tidyr)
library(dplyr)
library(purrr)

data.frame(
  team = c('A','A','B','B'),
  x = c(1,2,1,2),
  y = c(2,4,3,6)
) %>%
  group_by(team) %>%
  nest() %>%
  mutate(
    model = map(data, ~lm(y ~ x, data = .x)),
    slope = map_dbl(model, ~coef(.x)['x'])
  ) %>%
  select(team, slope)
शुरुआत निःशुल्क

एआई शिक्षक के साथ R सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
43
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “डेटा फ़्रेम को Nesting और Unnesting करना” पाठ निःशुल्क है?

हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “डेटा फ़्रेम को Nesting और Unnesting करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“डेटा फ़्रेम को Nesting और Unnesting करना” में मैं क्या सीखूँगा?

tidy workflows में list-columns के साथ काम करने के लिए nest() और unnest() का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“डेटा फ़्रेम को Nesting और Unnesting करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. pivot_longer() से Wide से Long
  2. pivot_wider() से Long से Wide
  3. String कॉलम के लिए separate() और unite()
  4. डेटा फ़्रेम को Nesting और Unnesting करना
← R Academy पर वापस जाएँ