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

डेटा फ़्रेम क्या है?
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.
नीचे दिए गए आरेख में हम दिखाते हैं कि डेटा फ्रेम के विभिन्न चयनों तक कैसे पहुंचा जा सकता है:
- पीला तीर चयन करता है पंक्ति में 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() उन्हें हटा देता है, इसलिए दोनों हमेशा एक दूसरे के स्थान पर उपयोग नहीं किए जा सकते।

![R डेटा फ्रेम स्लाइसिंग सिंटैक्स df[A, B] जिसमें पंक्तियाँ अल्पविराम के बाईं ओर और स्तंभ दाईं ओर होते हैं](https://www.guru99.com/images/r_programming/032918_1452_RDataFrames1.png)
