यह डेटा विश्लेषण में एक मूल समस्या है जो स्टेटा एक चरण में संबंधित है।एकाधिक चर के साथ विस्तृत पैनल से डेटा फ्रेम को दोबारा बदलें और कुछ समय परिवर्तक
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
s.t.:
वर्ष 2000 और 2005 (x1, x2) के लिए समय अपरिवर्तनीय डेटा (x0) और समय अलग-अलग डेटा के साथ एक विस्तृत डेटा फ्रेम बनाएं
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
मैं एक पैनल है जैसे कि यह आकार देने के लिए चाहते हैं, ताकि डेटा इस तरह दिखता है:
subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
मैं reshape
s.t. साथ ऐसा कर सकते
d2 <-reshape(d1,
idvar="subject",
varying=list(c("x1_2000","x1_2005"),
c("x2_2000","x2_2005")),
v.names=c("x1","x2"),
times = c(2000,2005),
direction = "long",
sep= "_")
मेरी मुख्य चिंता यह है कि जब आपके पास उपरोक्त कमांड के दर्जनों चर होते हैं तो बहुत लंबा होता है। stata
में एक बस टाइप करेंगे:
reshape long x1 x2, i(subject) j(year)
वहाँ आर में इस तरह के एक सरल उपाय है?
library(reshape2)
library(stringr)
# it is always useful to start with melt
d2 <- melt(d1, id=c("subject", "x0"))
# redefine the time and x1, x2, ... separately
d2 <- transform(d2, time = str_replace(variable, "^.*_", ""),
variable = str_replace(variable, "_.*$", ""))
# finally, cast as you want
d3 <- dcast(d2, subject+x0+time~variable)
अब आप भी निर्दिष्ट करने x1 और x2 की जरूरत नहीं है:
अच्छा! लेकिन क्या होता है जब चर का नाम _sample_1_2000_ आदि रखा जाता है ... क्या कोई 'sep = 'विकल्प के साथ अधिक spjhisticated हो सकता है? – Fred
@ फ्रेड, 'सीपीपी 'के स्थान पर' विभाजन 'तर्क का प्रयोग करें, यानी' reshape (d1, dir =" long ", भिन्न = 3: 6, विभाजन = सूची (regexp =" _2 ", = TRUE शामिल करें) 'या इस मामले को प्रश्न में एक को कम करें, यानी' reshape (setNames (d1, sub ("sample_", "", नाम (d1))), dir = "long", भिन्न = 3: 6, sep = "_") ' –