आर डेटा फ़्रेम: कैसे बनाएं, जोड़ें, चुनें और सबसेट करें

⚡ स्मार्ट सारांश

R डेटा फ़्रेम अलग-अलग प्रकार के कॉलम को समान लंबाई में संग्रहीत करता है, जो इसे विश्लेषण के लिए मानक आयताकार संरचना बनाता है। वर्गाकार कोष्ठक पंक्तियों और स्तंभों को अलग करते हैं, डॉलर चिह्न किसी स्तंभ तक पहुँचता है, और subset() किसी शर्त के आधार पर फ़िल्टर करता है।

  • 🧱 संरचना: डेटा फ्रेम समान लंबाई वाले वैक्टरों की एक सूची है, इसलिए प्रत्येक कॉलम में अलग-अलग प्रकार का डेटा हो सकता है।
  • सृष्टि: data.frame(a, b, c, d) चार वैक्टरों को जोड़ता है, और names() बाद में प्रत्येक कॉलम का नाम बदल देता है।
  • टुकड़ा करना: df[A, B] को पंक्तियों और फिर स्तंभों के रूप में पढ़ा जाता है, और एक खाली पक्ष उस पक्ष की सभी सामग्री का चयन करता है।
  • जोड़ना: df$quantity एक नया कॉलम असाइन करता है, बशर्ते नया वेक्टर पंक्ति गणना से बिल्कुल मेल खाता हो।
  • 🔎 छनन: subset(df, subset = price > 5) केवल उन पंक्तियों को रखता है जहां शर्त TRUE के रूप में मूल्यांकित होती है।
  • ⚠️ संस्करण Shift: R 4.0.0 के बाद से stringsAsFactors का डिफ़ॉल्ट मान FALSE है, इसलिए टेक्स्ट कॉलम वर्ण ही रहते हैं।

R डेटा फ़्रेम बनाएं, जोड़ें, चुनें और उपसमूह बनाएं

डेटा फ़्रेम क्या है?

A डेटा ढांचा मैट्रिक्स समान लंबाई वाले वैक्टरों की एक सूची है। मैट्रिक्स में केवल एक प्रकार का डेटा होता है, जबकि डेटा फ्रेम विभिन्न प्रकार के डेटा (संख्यात्मक, वर्ण, गुणनखंड आदि) को स्वीकार करता है।

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

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

क्योंकि डेटा फ्रेम वास्तव में एक सूची ही होती है, इसलिए सूचियों पर उपयोग किए जाने वाले एक्सेसर्स यहां भी काम करते हैं, यही कारण है कि इस ट्यूटोरियल में बाद में डॉलर चिह्न फिर से दिखाई देता है।

डेटा फ़्रेम कैसे बनाएं

हम एक डेटाफ्रेम बना सकते हैं R डेटा.फ्रेम() फ़ंक्शन में a, b, c और d चर पास करके। हम प्रत्येक चर का नाम निर्दिष्ट करके names() का उपयोग करके डेटा फ्रेम बना सकते हैं और कॉलम को नाम दे सकते हैं।

data.frame(df, stringsAsFactors = TRUE)

तर्क:

  • df: यह एक मैट्रिक्स हो सकता है जिसे डेटा फ्रेम में परिवर्तित किया जा सकता है या इसमें शामिल होने के लिए चरों का संग्रह हो सकता है
  • स्ट्रिंग्सअसफैक्टर्स: यह नियंत्रित करता है कि कैरेक्टर वैक्टर फैक्टर कॉलम बनते हैं या नहीं। पुराने संस्करणों में डिफ़ॉल्ट मान TRUE था, जबकि R 4.0.0 के बाद से यह FALSE है, इसलिए जब व्यवहार महत्वपूर्ण हो तो इसे स्पष्ट रूप से पास करें।

हम समान लंबाई के चार चरों को मिलाकर अपने पहले डेटा सेट के लिए R में एक डेटाफ्रेम बना सकते हैं।

# Create a, b, c, d variables
a <- c(10,20,30,40)
b <- c('book', 'pen', 'textbook', 'pencil_case')
c <- c(TRUE,FALSE,TRUE,FALSE)
d <- c(2.5, 8, 10, 7)
# Join the variables to create a data frame
df <- data.frame(a,b,c,d)
df

आउटपुट:

##     a         b     c     d
## 1  10        book  TRUE   2.5
## 2  20         pen  FALSE  8.0
## 3  30    textbook  TRUE   10.0
## 4  40 pencil_case  FALSE  7.0

प्रत्येक वेक्टर एक कॉलम बन गया, और प्रत्येक वेक्टर में मौजूद चार मान चार पंक्तियाँ बन गए। ध्यान दें कि आर्गुमेंट्स का कोई नाम नहीं था, इसलिए R ने कॉलम हेडर को वेरिएबल नामों से ही प्राप्त किया।

हम देख सकते हैं कि कॉलम हेडर का नाम वैरिएबल के समान ही है। हम R में फ़ंक्शन names() के साथ कॉलम का नाम बदल सकते हैं। नीचे R create dataframe उदाहरण देखें:

# Name the data frame
names(df) <- c('ID', 'items', 'store', 'price')
df

आउटपुट:

##   ID       items store price
## 1 10        book  TRUE   2.5
## 2 20         pen FALSE   8.0
## 3 30    textbook  TRUE  10.0
## 4 40 pencil_case FALSE   7.0

names() को असाइन करने से प्रत्येक हेडर एक साथ बदल जाता है, इसलिए प्रतिस्थापन वेक्टर में प्रति कॉलम ठीक एक प्रविष्टि होनी चाहिए। इसके बजाय एक कॉलम का नाम बदलने के लिए, names वेक्टर को इंडेक्स करें, जैसे names(df)[2] <- 'product'।

# Print the structure
str(df)

आउटपुट:

## 'data.frame':    4 obs. of  4 variables:
##  $ ID   : num  10 20 30 40
##  $ items: Factor w/ 4 levels "book","pen","pencil_case",..: 1 2 4 3
##  $ store: logi  TRUE FALSE TRUE FALSE
##  $ price: num  2.5 8 10 7

संस्करण संबंधी टिप्पणी। ऊपर दिया गया आउटपुट R के 4.0.0 से पुराने संस्करण पर तैयार किया गया था, जहाँ data.frame() डिफ़ॉल्ट रूप से कैरेक्टर वैक्टर को फ़ैक्टर में परिवर्तित करता था, यही कारण है कि आइटम को चार स्तरों वाले फ़ैक्टर के रूप में दिखाया गया है। R के मूल दस्तावेज़ में यह बताया गया है कि यह डिफ़ॉल्ट सेटिंग है। R 4.0.0 के लिए stringsAsFactors = FALSE में बदल दिया गया है।मौजूदा रिलीज़ पर उसी कोड को चलाने पर आइटम एक साधारण कैरेक्टर कॉलम के रूप में रह जाते हैं, और str() chr प्रिंट करता है। प्रिंट किए गए आउटपुट को पुनः प्राप्त करने के लिए data.frame() कॉल में stringsAsFactors = TRUE जोड़ें, या पढ़ें। फैक्टर ट्यूटोरियल जब वास्तव में कारकों की आवश्यकता होती है।

स्लाइस डेटा फ़्रेम

फ्रेम बन जाने के बाद, अगला काम इसके हिस्सों को वापस निकालना है। स्लाइसिंग, R का मूल तरीका है, और यह वैक्टर की तरह ही वर्गाकार कोष्ठकों का उपयोग करता है, बस एक के बजाय दो स्थितियों के साथ।

डेटा फ्रेम के मानों को स्लाइस करना संभव है। हम कोष्ठक में डेटा फ्रेम के नाम के आगे उन पंक्तियों और स्तंभों का चयन करते हैं जिन्हें वापस प्राप्त करना है।

डेटा फ़्रेम पंक्तियों और स्तंभों से बना होता है, df[A, B]। A पंक्तियों और B स्तंभों को दर्शाता है। हम पंक्तियों और/या स्तंभों को निर्दिष्ट करके स्लाइस कर सकते हैं।

नीचे दिए गए चित्र 1 से, बायां भाग दर्शाता है पंक्तियाँ, और दाहिना भाग है कॉलमध्यान दें कि प्रतीक : का अर्थ है सेवा मेरेउदाहरण के लिए, 1:3 का मतलब 1 से XNUMX तक के मानों का चयन करना है। सेवा मेरे 3.

R डेटा फ्रेम स्लाइसिंग सिंटैक्स df[A, B] जिसमें पंक्तियाँ अल्पविराम के बाईं ओर और स्तंभ दाईं ओर होते हैं

नीचे दिए गए आरेख में हम दिखाते हैं कि डेटा फ्रेम के विभिन्न चयनों तक कैसे पहुंचा जा सकता है:

R डेटा फ्रेम पर रंगीन तीर एकल सेल, पंक्ति श्रेणी, संपूर्ण स्तंभ और ब्लॉक चयन को दर्शाते हैं।

  • पीला तीर चयन करता है पंक्ति में 1 स्तंभ 2
  • हरा तीर चयन करता है पंक्तियाँ 1 से 2 तक
  • लाल तीर का चयन करता है स्तंभ 1
  • नीला तीर चयन करता है पंक्तियाँ 1 से 3 और कॉलम 3 से 4 तक

ध्यान दें कि, यदि हम बायाँ भाग खाली छोड़ दें, तो R चयन करेगा सभी पंक्तियाँसादृश्य से, यदि हम दायाँ भाग खाली छोड़ दें, तो R चयन करेगा सभी स्तंभ.

हम कंसोल में कोड चला सकते हैं:

## Select row 1 in column 2
df[1,2]

आउटपुट:

## [1] book
## Levels: book pen pencil_case textbook

"Levels" लाइन इसलिए दिखाई देती है क्योंकि आइटम इस सत्र में एक कारक है। R 4.0.0 और उसके बाद के संस्करणों में, यही कॉल "book" स्ट्रिंग को बिना "Levels" लाइन के प्रिंट करता है।

## Select Rows 1 to 2
df[1:2,]

आउटपुट:

##   ID items store price
## 1 10  book  TRUE   2.5
## 2 20   pen FALSE   8.0
## Select Columns 1
df[,1]

आउटपुट:

## [1] 10 20 30 40

df[,1] का उपयोग करके एक कॉलम का चयन करने पर फ्रेम रैपर हट जाता है और एक साधारण वेक्टर प्राप्त होता है। जब एक कॉलम वाले डेटा फ्रेम की आवश्यकता हो, तो drop = FALSE जोड़ें, जैसे कि df[, 1, drop = FALSE]।

## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]

आउटपुट:

##   store price
## 1  TRUE   2.5
## 2 FALSE   8.0
## 3  TRUE  10.0

कॉलम को उनके नाम से भी चुना जा सकता है। उदाहरण के लिए, नीचे दिया गया कोड इसे दर्शाता है।tracइसमें दो कॉलम हैं: आईडी और स्टोर।

# Slice with columns name
df[, c('ID', 'store')]

आउटपुट:

##   ID store
## 1 10  TRUE
## 2 20 FALSE
## 3 30  TRUE
## 4 40 FALSE

उत्पादन कोड में पदों की तुलना में नाम अधिक सुरक्षित होते हैं, क्योंकि किसी कॉलम को सम्मिलित करने या पुनर्व्यवस्थित करने से चुपचाप यह बदल जाता है कि df[, 3] किसे संदर्भित करता है जबकि df[, 'store'] उसी डेटा को इंगित करता रहता है।

डेटा फ़्रेम में कॉलम जोड़ें

आप डेटा फ्रेम में एक कॉलम भी जोड़ सकते हैं। R में नए वेरिएबल को नाम देने और डेटा फ्रेम में कॉलम जोड़ने के लिए आपको $ चिह्न का उपयोग करना होगा।

# Create a new vector
quantity <- c(10, 35, 40, 5)

# Add `quantity` to the `df` data frame
df$quantity <- quantity
df

आउटपुट:

##   ID       items store price quantity
## 1 10        book  TRUE   2.5       10
## 2 20         pen FALSE   8.0       35
## 3 30    textbook  TRUE  10.0       40
## 4 40 pencil_case FALSE   7.0        5

ध्यान दें: वेक्टर में तत्वों की संख्या डेटा फ्रेम में तत्वों की संख्या के बराबर होनी चाहिए। R में डेटा फ्रेम में एक कॉलम जोड़ने के लिए निम्नलिखित कथन को निष्पादित करें।

quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity

त्रुटि देता है:

Error in `

lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4

इस संदेश में डेटा फ़्रेम के लिए रिप्लेसमेंट ऑपरेटर का नाम दिया गया है और दोनों संख्याएँ बताई गई हैं, इसलिए यह आपको बताता है कि आपको क्या ठीक करना है। R केवल तभी रिप्लेसमेंट को रीसायकल करता है जब उसकी लंबाई पंक्तियों की संख्या को पूरी तरह से विभाजित करती है, यही कारण है कि df$currency <- 'EUR' जैसे 1 लंबाई वाले मान को स्वीकार किया जाता है जबकि चार पंक्तियों के लिए 3 लंबाई वाले वेक्टर को अस्वीकार कर दिया जाता है। cbind() इसी तरह एक कॉलम जोड़ता है, और rbind() पंक्तियों को जोड़ने के लिए इसका समकक्ष है।

डेटा फ़्रेम का एक कॉलम चुनें

कभी-कभी हमें भविष्य में उपयोग के लिए डेटा फ्रेम के किसी कॉलम को स्टोर करने या उस पर कोई ऑपरेशन करने की आवश्यकता होती है। डेटा फ्रेम से कॉलम का चयन करने के लिए हम $ चिह्न का उपयोग कर सकते हैं।

# Select the column ID
df$ID

आउटपुट:

## [1] 1 2 3 4

आउटपुट को ध्यान से पढ़ें। ID को वेक्टर c(10, 20, 30, 40) से बनाया गया है, इसलिए लाइव कंसोल पर 10 20 30 40 प्रिंट होता है; ऊपर दिखाए गए 1 2 3 4 पंक्ति की स्थिति हैं, संग्रहीत मान नहीं। पंक्ति के प्रारंभ में [1] केवल उस पंक्ति के पहले तत्व का सूचकांक है, डेटा का हिस्सा नहीं।

तीन रास्ते एक ही कॉलम तक पहुँचते हैं: df$ID, df[['ID']] और df[, 'ID']। डॉलर चिह्न आंशिक मिलान करता है, इसलिए df$I अभी भी ID को खोज लेगा, जो कंसोल पर सुविधाजनक है लेकिन सहेजी गई स्क्रिप्ट में जोखिम भरा है।

डेटा फ़्रेम का उपसमूह

पिछले अनुभाग में, हमने बिना किसी शर्त के एक संपूर्ण कॉलम का चयन किया था। सबसेट इस आधार पर कि कोई निश्चित स्थिति सत्य थी या नहीं।

हम subset() फ़ंक्शन का उपयोग करते हैं।

subset(x, condition)
arguments:
- x: data frame used to perform the subset
- condition: define the conditional statement

हम केवल उन्हीं वस्तुओं को वापस करना चाहते हैं जिनकी कीमत 5 से अधिक है, इसलिए हम ऐसा कर सकते हैं:

# Select price above 5
subset(df, subset = price > 5)

आउटपुट:

ID       items store price
2 20         pen FALSE     8
3 30    textbook  TRUE    10
4 40 pencil_case FALSE     7

पंक्ति लेबल 2, 3 और 4 मूल पंक्ति नाम हैं जो df से लिए गए हैं, जिससे पता चलता है कि पहली पंक्ति को फ़िल्टर किया गया था। subset() एक साथ कॉलम चुनने के लिए एक select तर्क भी स्वीकार करता है, और इसका समतुल्य ब्रैकेट रूप df[df$price > 5, ] है। ब्रैकेट रूप उन NA पंक्तियों को रखता है जहां शर्त पूरी नहीं होती है, जबकि subset() उन्हें हटा देता है, इसलिए दोनों हमेशा एक दूसरे के स्थान पर उपयोग नहीं किए जा सकते।

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

rbind(df, new_row) फ़ंक्शन का उपयोग करें, जहाँ new_row एक डेटा फ़्रेम या सूची है जिसमें समान कॉलम समान क्रम में मौजूद हैं। कॉलम के प्रकार मेल खाने चाहिए, अन्यथा R उन्हें बदल देगा। कई पंक्तियों के लिए, पहले एक सूची बनाएँ और एक बार में ही उन्हें संयोजित करें, क्योंकि बार-बार rbind() फ़ंक्शन का उपयोग धीमा होता है।

इसे NULL असाइन करें, जैसे कि df$quantity <- NULL। नेगेटिव इंडेक्सिंग भी काम करती है: df[, -3] तीसरे कॉलम को हटा देता है, और df[, !names(df) %in% c("store")] कॉलम की स्थिति पर निर्भर किए बिना नाम से कॉलम हटा देता है।

dim(df) पंक्तियों और स्तंभों को एक साथ लौटाता है, जबकि nrow() और ncol() प्रत्येक को अलग-अलग लौटाते हैं। str(df) प्रत्येक स्तंभ का प्रकार प्रिंट करता है, summary(df) प्रति-स्तंभ सांख्यिकी देता है, और head(df) पहली छह पंक्तियों को दिखाता है।

नामों के वेक्टर को इंडेक्स करें: names(df)[2] <- "product" केवल दूसरे हेडर को बदलता है। वर्तमान नाम से नाम बदलने के लिए, names(df)[names(df) == "items"] <- "product" का उपयोग करें, जो कॉलम क्रम बदलने के बाद भी काम करता रहता है।

एक टिबल टाइडिवर्स डेटा फ्रेम होता है। यह कभी भी स्ट्रिंग को फैक्टर में परिवर्तित नहीं करता, कभी भी कॉलम नामों का आंशिक मिलान नहीं करता, केवल कॉलम प्रकारों के साथ पहली दस पंक्तियों को प्रिंट करता है, और एकल ब्रैकेट के साथ सबसेट करने पर हमेशा एक टिबल लौटाता है।

फ़िल्टर(df, price > 5) है दुत्कार यह समतुल्य है, और पाइप के माध्यम से select(), mutate() और arrange() के साथ जुड़ता है। subset() के विपरीत, filter() को प्रोग्रामेटिक उपयोग के लिए डिज़ाइन किया गया है, इसलिए यह फ़ंक्शन के अंदर अनुमानित रूप से व्यवहार करता है।

एआई सहायक str() और summary() आउटपुट को पढ़ते हैं, फिर टाइप रूपांतरण, गुम मान रणनीतियों और कॉलम के नाम बदलने जैसे समाधान प्रस्तावित करते हैं जिन्हें चलाया जा सकता है। वे जटिल प्रतिस्थापन त्रुटियों की व्याख्या भी करते हैं, हालांकि उत्पन्न प्रत्येक रूपांतरण को वास्तविक डेटा के साथ जांचने की आवश्यकता होती है।

हां. गिटहब कोपिलॉट में चलता है RStudio 2023.09.0 और उसके बाद के संस्करणों में, टूल्स, ग्लोबल ऑप्शंस, फिर कोड असिस्टेंट सेटिंग के माध्यम से। यह कमेंट से data.frame(), subset() और rbind() कॉल तैयार करता है, लेकिन कॉलम नामों को सत्यापित करना आवश्यक है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: