खोज…


परिचय

आर में, सारणीबद्ध डेटा को डेटा फ़्रेम में संग्रहीत किया जाता है। यह विषय एकल तालिका को बदलने के विभिन्न तरीकों को शामिल करता है।

टिप्पणियों

सहायक पैकेज

फेरबदल समारोह

डेटा को reshape करने के लिए सबसे लचीला बेस आर फ़ंक्शन है। इसके सिंटैक्स के लिए देखें ?reshape

# create unbalanced longitudinal (panel) data set
set.seed(1234)
df <- data.frame(identifier=rep(1:5, each=3),
                 location=rep(c("up", "down", "left", "up", "center"), each=3),
                 period=rep(1:3, 5), counts=sample(35, 15, replace=TRUE),
                 values=runif(15, 5, 10))[-c(4,8,11),]
df

   identifier location period counts   values
1           1       up      1      4 9.186478
2           1       up      2     22 6.431116
3           1       up      3     22 6.334104
5           2     down      2     31 6.161130
6           2     down      3     23 6.583062
7           3     left      1      1 6.513467
9           3     left      3     24 5.199980
10          4       up      1     18 6.093998
12          4       up      3     20 7.628488
13          5   center      1     10 9.573291
14          5   center      2     33 9.156725
15          5   center      3     11 5.228851

ध्यान दें कि data.frame असंतुलित है, अर्थात, यूनिट 2 पहली अवधि में एक अवलोकन याद कर रहा है, जबकि इकाइयों 3 और 4 दूसरी अवधि में अवलोकन गायब हैं। इसके अलावा, ध्यान दें कि दो चर हैं जो अवधि में भिन्न होते हैं: मायने रखता है और मूल्य, और दो जो भिन्न नहीं होते हैं: पहचानकर्ता और स्थान।

लंबा चौड़ा

डेटा को फिर से आकार देने के लिए। विस्तृत प्रारूप में,

# reshape wide on time variable
df.wide <- reshape(df, idvar="identifier", timevar="period",
                   v.names=c("values", "counts"), direction="wide")
df.wide
   identifier location values.1 counts.1 values.2 counts.2 values.3 counts.3
1           1       up 9.186478        4 6.431116       22 6.334104       22
5           2     down       NA       NA 6.161130       31 6.583062       23
7           3     left 6.513467        1       NA       NA 5.199980       24
10          4       up 6.093998       18       NA       NA 7.628488       20
13          5   center 9.573291       10 9.156725       33 5.228851       11

ध्यान दें कि लापता समय अवधि NA के साथ भरी हुई है।

व्यापक फेरबदल में, "v.names" तर्क उन स्तंभों को निर्दिष्ट करता है जो समय के साथ बदलते हैं। यदि स्थान चर आवश्यक नहीं है, तो इसे "ड्रॉप" तर्क के साथ पुन: आकार देने से पहले गिराया जा सकता है। Data.frame से एकमात्र गैर-अलग / गैर-आईडी कॉलम छोड़ने में, v.names तर्क अनावश्यक हो जाता है।

reshape(df, idvar="identifier", timevar="period", direction="wide",
        drop="location")

वाइड टू लॉन्ग

वर्तमान df.wide के साथ लंबे समय तक फेरबदल करने के लिए, एक न्यूनतम वाक्यविन्यास है

reshape(df.wide, direction="long")

हालांकि, यह आमतौर पर मुश्किल है:

# remove "." separator in df.wide names for counts and values
names(df.wide)[grep("\\.", names(df.wide))] <-
              gsub("\\.", "", names(df.wide)[grep("\\.", names(df.wide))])

अब सरल सिंटैक्स अपरिभाषित कॉलम के बारे में एक त्रुटि उत्पन्न करेगा।

स्तंभ नामों के साथ जो स्वचालित रूप से पार्स करने के लिए reshape फ़ंक्शन के लिए अधिक कठिन हैं, कभी-कभी "अलग-अलग" तर्क को जोड़ना आवश्यक होता है जो परिवर्तन को लंबे प्रारूप में परिवर्तन के लिए समूह विशेष चर में reshape को बताता है। यह तर्क चर नामों या सूचकांकों के वैक्टर की एक सूची लेता है।

reshape(df.wide, idvar="identifier",
        varying=list(c(3,5,7), c(4,6,8)), direction="long")

लंबे समय तक फेरबदल में, "v.names" तर्क के परिणामस्वरूप भिन्न चर नाम बदलने के लिए प्रदान किया जा सकता है।

कभी कभी के विनिर्देश "अलग" "सितं" तर्क जो बताता है के उपयोग से बचा जा सकता reshape चर नाम के कौन से भाग मान तर्क निर्दिष्ट करता है और जो समय तर्क निर्दिष्ट करता है।

डेटा को फिर से आकार देना

अक्सर डेटा टेबल में आता है। आम तौर पर एक व्यक्ति इस सारणीबद्ध डेटा को विस्तृत और लंबे प्रारूप में विभाजित कर सकता है। एक विस्तृत प्रारूप में, प्रत्येक चर का अपना कॉलम होता है।

व्यक्ति ऊंचाई (सेंटिमीटर] आयु [वर्ष]
एलिसन 178 20
बॉब 174 45
कार्ल 182 31

हालांकि, कभी-कभी एक लंबा प्रारूप होना अधिक सुविधाजनक होता है, जिसमें सभी चर एक कॉलम में होते हैं और मान दूसरे कॉलम में होते हैं।

व्यक्ति परिवर्तनशील मूल्य
एलिसन ऊंचाई (सेंटिमीटर] 178
बॉब ऊंचाई (सेंटिमीटर] 174
कार्ल ऊंचाई (सेंटिमीटर] 182
एलिसन आयु [वर्ष] 20
बॉब आयु [वर्ष] 45
कार्ल आयु [वर्ष] 31

बेस आर, साथ ही साथ थर्ड पार्टी पैकेज का उपयोग इस प्रक्रिया को सरल बनाने के लिए किया जा सकता है। प्रत्येक विकल्प के लिए, mtcars डेटासेट का उपयोग किया जाएगा। डिफ़ॉल्ट रूप से, यह डेटासेट लंबे प्रारूप में है। पैकेजों के काम करने के लिए, हम पहले कॉलम के रूप में पंक्ति नामों को सम्मिलित करेंगे।

mtcars # shows the dataset
data <- data.frame(observation=row.names(mtcars),mtcars)

बेस आर

बेस आर में दो कार्य हैं जिनका उपयोग विस्तृत और लंबे प्रारूप के बीच परिवर्तित करने के लिए किया जा सकता है: stack() और unstack()

long <- stack(data)
long # this shows the long format
wide <- unstack(long)    
wide # this shows the wide format

हालांकि, अधिक उन्नत उपयोग के मामलों के लिए ये कार्य बहुत जटिल हो सकते हैं। सौभाग्य से, तीसरे पक्ष के पैकेजों का उपयोग करने वाले अन्य विकल्प हैं।

टाइडर पैकेज

यह पैकेज चौड़े से लंबे और spread() लिए gather() का उपयोग करता है और लंबे से चौड़े में परिवर्तित होता है।

library(tidyr)
long <- gather(data, variable, value, 2:12) # where variable is the name of the 
# variable column, value indicates the name of the value column and 2:12 refers to
# the columns to be converted.
long # shows the long result
wide <- spread(long,variable,value)
wide # shows the wide result (~data)

डेटाटेबल पैकेज

Data.table पैकेज reshape2 फ़ंक्शंस का विस्तार करता है और लंबे समय से व्यापक तक जाने के लिए फ़ंक्शन melt() का उपयोग विस्तृत से लंबे और dcast() में जाने के लिए करता है।

library(data.table)
long <- melt(data,'observation',2:12,'variable', 'value')
long # shows the long result
wide <- dcast(long, observation ~ variable)
wide # shows the wide result (~data)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow