दिलचस्प पोस्ट
जावास्क्रिप्ट onkeydown घटना आग केवल एक बार? कई विशेषताओं के लिए उपनाम टाइप करें गतिविधि से टुकड़ा के पाठ का व्यू का टेक्स्ट कैसे बदला जाए AJAX द्वारा पुनर्प्राप्त किए गए सामग्री के साथ HTML पृष्ठ बदलें एक div को लंबवत और क्षैतिज रूप से jQuery का उपयोग करना विंडोज सेवाओं के लिए वैश्विक अपवाद हैंडलर? एंड्रॉइड एप्लिकेशन में डेटटाइम पिकर स्तंभों में पाई चार्ट के लिए किंवदंती कैसे प्रदर्शित करें? वर्तमान मुद्रित कंसोल लाइन मिटा दें कैसे सी + + में स्ट्रिंग शुरू की जांच करने के लिए घुड़सवार: नीचे स्क्रॉल करें एक्लिप्स में ब्रेडक्रंब को अक्षम कैसे करें क्यों `अर्रे (0,1,2) == सरणी (0,1,2)` अपेक्षित परिणाम वापस नहीं करता? पैयथॉन को देशी स्क्लिट 3 को छोड़ने के लिए और नवीनतम sqlite3 संस्करण (स्थापित) का उपयोग करें एक्सेल वर्कबुक खोलने के लिए वाइल्डकार्ड का उपयोग करना

विभिन्न लंबाई के दो डेटा फ्रेम के संयोजन

मेरे पास दो डेटा फ्रेम हैं
पहला केवल एक स्तंभ और 10 पंक्तियों का है
दूसरा 3 कॉलम और 50 पंक्तियों का है।

जब मैं cbind का उपयोग करके इसे गठबंधन करने का प्रयास करता cbind , तो यह यह त्रुटि देता है:

Data.frame में त्रुटि (…, check.names = FALSE):

क्या कोई ऐसा करने के लिए किसी अन्य कार्य का सुझाव दे सकता है?
पी एस मैंने यह भी सूचियों का उपयोग करने की कोशिश की है, लेकिन यह एक ही त्रुटि देता है

3 कॉलम वाला डेटा फ्रेम, एक CSV फ़ाइल में पहले 3 कॉलम होना चाहिए, जबकि एक कॉलम के साथ डेटा फ्रेम उस फ़ाइल का चौथा स्तंभ होना चाहिए, जब मैं write.table फ़ंक्शन के साथ लिखता हूं। पहले 3 कॉलम में 50 पंक्तियाँ हैं और चौथे स्तंभ को पहले 10 पंक्तियों पर कब्जा करना चाहिए।

Solutions Collecting From Web of "विभिन्न लंबाई के दो डेटा फ्रेम के संयोजन"

plyr पैकेज में एक फ़ंक्शन rbind.fill होता rbind.fill यह डेटा मर्ज करेगा और रिक्त कक्षों के लिए NA लागू करेगा:

 library(plyr) combined <- rbind.fill(mtcars[c("mpg", "wt")], mtcars[c("wt", "cyl")]) combined[25:40, ] mpg wt cyl 25 19.2 3.845 NA 26 27.3 1.935 NA 27 26.0 2.140 NA 28 30.4 1.513 NA 29 15.8 3.170 NA 30 19.7 2.770 NA 31 15.0 3.570 NA 32 21.4 2.780 NA 33 NA 2.620 6 34 NA 2.875 6 35 NA 2.320 4 

यह मेरे लिए स्पष्ट नहीं है कि ओपी वास्तव में क्या है, फॉलो-अप टिप्पणियों को देखते हुए। यह संभव है कि वह वास्तव में फाइल को डेटा लिखने का एक तरीका तलाश रहे हैं

लेकिन मान लीजिए कि हम वास्तव में अलग-अलग समय के कई डेटा फ़्रेमों को cbind करने के लिए हैं।

cbind अंततः data.frame , जिनकी सहायता फाइलें कहती हैं:

डेटा के लिए दिए गए ऑब्जेक्ट्स को समान पंक्तियों की संख्या होनी चाहिए, लेकिन यदि आवश्यक हो तो परमाणु वैक्टर, कारक और चरित्र वेक्टर को संरक्षित किया जाएगा, यदि आवश्यक हो तो (आर 2.9.0, सूची आर्गिमेंट के तत्वों सहित)।

इसलिए ओपी के वास्तविक उदाहरण में, कोई त्रुटि नहीं होनी चाहिए , क्योंकि आर को कम वैक्टर को 50 की लंबाई में रीसायकल करना चाहिए। वास्तव में, जब मैं निम्नलिखित चलाता हूं:

 set.seed(1) a <- runif(50) b <- 1:50 c <- rep(LETTERS[1:5],length.out = 50) dat1 <- data.frame(a,b,c) dat2 <- data.frame(d = runif(10),e = runif(10)) cbind(dat1,dat2) 

मुझे कोई गलती नहीं मिलती है और उम्मीद के मुताबिक छोटी डाटा फ़्रेम पुनर्नवीनीकरण होता है हालांकि, जब मैं इसे चलाता हूं:

 set.seed(1) a <- runif(50) b <- 1:50 c <- rep(LETTERS[1:5],length.out = 50) dat1 <- data.frame(a,b,c) dat2 <- data.frame(d = runif(9), e = runif(9)) cbind(dat1,dat2) 

मुझे निम्नलिखित त्रुटि मिलती है:

 Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 50, 9 

लेकिन आर के बारे में अच्छी बात यह है कि आप इसे लगभग कुछ भी करना चाहते हैं, भले ही आपको नहीं करना चाहिए। उदाहरण के लिए, यहां एक सरल कार्य है जो असमान लम्बाई के डेटा फ्रेम्स को cbind देगा और NA साथ छोटे लोगों को पैड करेगा:

 cbindPad <- function(...){ args <- list(...) n <- sapply(args,nrow) mx <- max(n) pad <- function(x, mx){ if (nrow(x) < mx){ nms <- colnames(x) padTemp <- matrix(NA, mx - nrow(x), ncol(x)) colnames(padTemp) <- nms if (ncol(x)==0) { return(padTemp) } else { return(rbind(x,padTemp)) } } else{ return(x) } } rs <- lapply(args,pad,mx) return(do.call(cbind,rs)) } 

जो इस तरह से इस्तेमाल किया जा सकता है:

 set.seed(1) a <- runif(50) b <- 1:50 c <- rep(LETTERS[1:5],length.out = 50) dat1 <- data.frame(a,b,c) dat2 <- data.frame(d = runif(10),e = runif(10)) dat3 <- data.frame(d = runif(9), e = runif(9)) cbindPad(dat1,dat2,dat3) 

मैं कोई गारंटी नहीं देता कि यह फ़ंक्शन सभी मामलों में काम करता है; इसका मतलब केवल एक उदाहरण के रूप में है

संपादित करें

यदि प्राथमिक लक्ष्य एक सीएसवी या पाठ फ़ाइल बनाना है, तो आपको यह करने के लिए फ़ंक्शन को पैड से NA बजाय "" बदलने की ज़रूरत है और फिर ऐसा कुछ करें:

 dat <- cbindPad(dat1,dat2,dat3) rs <- as.data.frame(apply(dat,1,function(x){paste(as.character(x),collapse=",")})) 

और फिर write.table पर write.table उपयोग करें

एंड्री के जवाब पर चर्चा करते हुए, plyr::rbind.fill() का उपयोग करने के सुझाव: t() आपके पास कुछ cbind.fill() (जो कि plyr हिस्सा नहीं है) है, जो समान डेटा के विचार के साथ आपके डेटा फ्रेम का निर्माण करेगा संख्या।

मुझे इसके साथ वास्तव में कोई त्रुटि नहीं मिली है

 a <- as.data.frame(matrix(c(sample(letters,50, replace=T),runif(100)), nrow=50)) b <- sample(letters,10, replace=T) c <- cbind(a,b) 

सभी अक्षरों में शामिल होने के लिए मैंने अलग-अलग कार्यशीलता वाले पत्रों का उपयोग किया था (जो इसे नहीं था)। आपकी 'प्रथम डेटा फ्रेम', जो वास्तव में केवल एक सदिश है, उस चौथे स्तंभ में 5 बार दोबारा दोहराई गई है …

लेकिन गुरु से सवाल सभी टिप्पणियां अब भी प्रासंगिक हैं 🙂

मुझे लगता है कि मैं एक बहुत कम समाधान के साथ आया हूँ .. उम्मीद है कि किसी को मदद मिलती है

 cbind.na<-function(df1, df2){ #Collect all unique rownames total.rownames<-union(x = rownames(x = df1),y = rownames(x=df2)) #Create a new dataframe with rownames df<-data.frame(row.names = total.rownames) #Get absent rownames for both of the dataframe absent.names.1<-setdiff(x = rownames(df1),y = rownames(df)) absent.names.2<-setdiff(x = rownames(df2),y = rownames(df)) #Fill absents with NAs df1.fixed<-data.frame(row.names = absent.names.1,matrix(data = NA,nrow = length(absent.names.1),ncol=ncol(df1))) colnames(df1.fixed)<-colnames(df1) df1<-rbind(df1,df1.fixed) df2.fixed<-data.frame(row.names = absent.names.2,matrix(data = NA,nrow = length(absent.names.2),ncol=ncol(df2))) colnames(df2.fixed)<-colnames(df2) df2<-rbind(df2,df2.fixed) #Finally cbind into new dataframe df<-cbind(df,df1[rownames(df),],df2[rownames(df),]) return(df) } 

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

 list.df <- list(data.frame(a = 1:10), data.frame(a = 1:5), data.frame(a = 1:3)) max.rows <- max(unlist(lapply(list.df, nrow), use.names = F)) list.df <- lapply(list.df, function(x) { na.count <- max.rows - nrow(x) if (na.count > 0L) { na.dm <- matrix(NA, na.count, ncol(x)) colnames(na.dm) <- colnames(x) rbind(x, na.dm) } else { x } }) do.call(cbind, list.df) # aaa # 1 1 1 1 # 2 2 2 2 # 3 3 3 3 # 4 4 4 NA # 5 5 5 NA # 6 6 NA NA # 7 7 NA NA # 8 8 NA NA # 9 9 NA NA # 10 10 NA NA 

बस मेरे 2 सेंट यह कोड दो मैट्रिक्स या डेटा। फ्रेम को एक में जोड़ता है। यदि एक डेटा संरचना में पंक्तियों की संख्या कम है तो एनए वैल्यू के साथ पंक्तियां गायब हो जाएंगी।

 combine.df <- function(x, y) { rows.x <- nrow(x) rows.y <- nrow(y) if (rows.x > rows.y) { diff <- rows.x - rows.y df.na <- matrix(NA, diff, ncol(y)) colnames(df.na) <- colnames(y) cbind(x, rbind(y, df.na)) } else { diff <- rows.y - rows.x df.na <- matrix(NA, diff, ncol(x)) colnames(df.na) <- colnames(x) cbind(rbind(x, df.na), y) } } df1 <- data.frame(1:10, row.names = 1:10) df2 <- data.frame(1:5, row.names = 10:14) combine.df(df1, df2) 

आशा है कि यह आपके लिए काम करेगा!

आप असमान आकार के साथ दो मैट्रिक्स के संयोजन के लिए library(qpcR) उपयोग कर सकते हैं।

 resultant_matrix <- qpcR:::cbind.na(matrix1, matrix2) 

नोट: – परिणामस्वरूप मैट्रिक्स मैट्रिक्स 2 के आकार का होगा।

मुझे भी इसी तरह की समस्या थी, मैंने दो डेटा सेटों के किसी विशेष कॉलम में प्रविष्टियों का मिलान किया और केवल तभी सीधा किया जब यह मेल खाती हो। दो डेटा सेटों के लिए, डेटा 1 और डेटा 2, मैं डेटा 2 में डेटा 1 में एक कॉलम जोड़ रहा हूं, जो कि दोनों के पहले कॉलम की तुलना करते हैं।

 for(i in 1:nrow(data1){ for( j in 1:nrow(data2){ if (data1[i,1]==data2[j,1]) data1[i,3]<- data2[j,2] } }